Programming

Moderator: Aesthetics

User avatar
thedisavowed
Happy Cycler
Posts: 2971
Joined: Sun Jul 03, 2005 6:35 pm
Location: Texas
Contact:

Post by thedisavowed »

I am a php programmer.

I like programming b/c even though it is very logical and all that - there's so many possibilities and so many ways to do things. It lets me use my brain, and I like that.

A couple of thoughts about the profession:

1) IT is a very experience oriented profession. If you're seriously considering doing it, don't sleepwalk through school. Learn a language/solution broadly and deeply - and do as much development as you can. 3-5 years experience is the sweet spot for getting the jobs. You may as well start now.

2) You need to think a lot about your technology choices. It's tempting to go with something like PHP because it's open source and so ubiquitous (this very board runs on PHP). But if you want to work in an enterprise environment (the corporate world), jobs tend to demand languages like Java, and, more frequently, the .NET Framework (C# or VB.NET)

Open source languages tend to be more prevalent in the world of internet startups, though sites like Facebook are changing that I suppose.

PS - Javascript sucks man. It's ugly to write, read, and debug. If there's one thing in my work I wish would go away - it would be that. Do yourself a favor and skip conventional javascript once you get the basics down. Use a framework like JQUERY or Mootools. It'll save you a lot of cross-browser hassle.

Edit: Oh, one more thing. While you should get all the skills you can, remember that developer jobs are frequently outsourced to India and places like it. My boss doesn't use me on the design end much because she can pay a kid in Pakistan $200 to do it. I can't possibly compete with that. Your value add will be your managerial and communication skills. Develop something other than coding skills that you can present to your employer. It will help.
User avatar
turquoise70
Happy Cycler
Posts: 4893
Joined: Thu Jun 07, 2007 12:30 am
Location: the system
Contact:

Post by turquoise70 »

thedisavowed wrote:1) IT is a very experience oriented profession. If you're seriously considering doing it, don't sleepwalk through school. Learn a language/solution broadly and deeply - and do as much development as you can. 3-5 years experience is the sweet spot for getting the jobs. You may as well start now.
Could you clarify the part about doing as much development as I can? What did you do towards that end before you had a job programming?
"grand mistress of the grace note freedledeedee melodies" - Cupz, 2026
User avatar
rik0000
Eagle Minded
Posts: 286
Joined: Wed Jul 01, 2009 9:47 am
Location: Somewhere sometime

Post by rik0000 »

thedisavowed wrote:PS - Javascript sucks man. It's ugly to write, read, and debug. If there's one thing in my work I wish would go away - it would be that. Do yourself a favor and skip conventional javascript once you get the basics down. Use a framework like JQUERY or Mootools. It'll save you a lot of cross-browser hassle.
Don't do that.... If you want a slow(er) website use those frameworks, you end up loading a lot of javascript you don't use. If you use a lot of web 2.0 stuff it's okay, but most of the time it's just loaded for 1 or 2 functions of the vast possibilities of it. Many sites can be easily optimised, just by checking which scripts are loaded and deleting redundant stuff. A colleague does this for a living and loading of scripts is one of his key points. (Apperently, besides the effect on user experience, it's also good for you google ranking).
I agree on learning a language broadly and deeply and that also goes for javascript. Cross-browser isn't that of a hassle anymore (also with IE7/IE8(/IE9) it's also getting easier).
Unexpect the expected
User avatar
Cupz
High Scorer
Posts: 10649
Joined: Sat Nov 19, 2005 2:15 pm

Post by Cupz »

Actionscript 2.0 is the fucking shiiiiit!
Throw away your smartphone.
User avatar
rik0000
Eagle Minded
Posts: 286
Joined: Wed Jul 01, 2009 9:47 am
Location: Somewhere sometime

Post by rik0000 »

Cupz wrote:Actionscript 2.0 is the fucking shiiiiit!
Why not 3.0? Isn't 2.0 something as not really 1.0 and not really 3.0, some intermediate....? In class we skipped 2.0 for that reason...

(But yeah, actionscript is fun, if I recall correctly, it has been a while :))
Unexpect the expected
User avatar
sub-r
Posts Quantity
Posts: 130
Joined: Fri Aug 06, 2010 2:02 pm
Contact:

Post by sub-r »

rik0000 wrote:Why not 3.0? Isn't 2.0 something as not really 1.0 and not really 3.0, some intermediate....? In class we skipped 2.0 for that reason...
I only ever used 2.0, 3.0 really blows when you're used to 2.0. Simple features were complicated dramatically :P
User avatar
rik0000
Eagle Minded
Posts: 286
Joined: Wed Jul 01, 2009 9:47 am
Location: Somewhere sometime

Post by rik0000 »

sub-r wrote:
rik0000 wrote:Why not 3.0? Isn't 2.0 something as not really 1.0 and not really 3.0, some intermediate....? In class we skipped 2.0 for that reason...
I only ever used 2.0, 3.0 really blows when you're used to 2.0. Simple features were complicated dramatically :P
1.0 is a scripting language almost the same as javascript, while 3.0 is more like a programming language with things like object oriented programming. What I've seen of 2.0 it's an attempt to achieve the things that are completed in 3.0.

But I understand that if you're accustomed to 2.0, you're not comfortable with 3.0, isn't that with all things in life?
Unexpect the expected
User avatar
dono
Sherbet Head
Posts: 756
Joined: Wed Sep 23, 2009 7:38 pm
Location: East Coast
Contact:

Post by dono »

Code: Select all

#!/usr/bin/perl
$_ = "&264SEL%4V8ZSVE^#8Zh\n";
tr/!1@^6V5*3N%4EZ#2L&8X7P0J9QhS/gixcshzdyfotarkunJebplvmqw. /s; print;
:wink:
Scott
User avatar
(parenthesis)
Sherbet Head
Posts: 679
Joined: Fri Jun 05, 2009 6:56 pm
Contact:

Post by (parenthesis) »

Amateur programmer here. I've learned a lot of Visual Basic from the class I'm taking but I want to use something more powerful. I'm thinking about getting into C++ or Java sometime soon
No, I won't. Please go away. I don't like you.
User avatar
Guido
Dayvan Cowboy
Posts: 1778
Joined: Sun Oct 01, 2006 9:45 am

Post by Guido »

I made a mod r/m opcode disassembler today, which is basically an essential part of a x86 disassembler.

http://kashmirboots.com/upload/modrm.txt
Borné dans sa nature, infini dans ses vœux, l'homme est un dieu tombé qui se souvient des cieux.
User avatar
Pantheon
Sherbet Head
Posts: 796
Joined: Sun May 18, 2008 2:27 pm
Location: Edinburgh, Scotland

Post by Pantheon »

Guido wrote:I made a mod r/m opcode disassembler today, which is basically an essential part of a x86 disassembler.

http://kashmirboots.com/upload/modrm.txt
Aha, cool. I've toyed around making x86 decoders and encoders too. I always got sidetracked and never finished one though, so its cool to see that you have writen one.

I've tested the code in MSVC++, and it works nicely. It wasnt happy about using initaliser lists to fill your unsigned char arrays btw. Also I noticed you can get rid of that switch statement in decodeSIB() by replacing it with:
PS: twoism wont let me post what I wrote below, it keeps messing it up :S.

Code: Select all

realscale = 1 <<sib> scale; 
what compiler are you using? I didnt try microsofts C compiler with it however.

Out of interest I tried to do a real world test with it by adding this code also:

Code: Select all

extern int myFunc( int a )
{
	printf( "Hello" );
	return 0;
}
and then setting in main():

Code: Select all

char* opcode = (char*)myFunc;
thus opcode points to this instruction (I think the jmp is generated because of Edit and Continue was enabled or something)

Code: Select all

bytes: E9 CA 01 00 00
instruction: jmp myFunc
address: (4113A0h)
but your code decompiles it to

Code: Select all

EDX, ECX
does it not handle literal operands yet?

I realy like this work guido, it realy makes me wish i'd finished one of mine.

Im heavy into writing self modifying code btw, there is something realy enchanting about it. Has anyone experimented with it?[/code]
User avatar
Guido
Dayvan Cowboy
Posts: 1778
Joined: Sun Oct 01, 2006 9:45 am

Post by Guido »

Hey Pantheon, cool that you think this is interesting, I didn't really expect anyone to know what a mod r/m byte is ;).

First of all, I'll admit the code is quite ugly and I didn't really put any effort in making it readable or compliant with any official C standard or guideline.

The reason it doesn't work for that JMP is that the code I posted only handles the disassembly of mod r/m bytes and the subsequent sib byte if present. This basically means that it can decode the format of certain instructions which employ this type of encoding into a human readable string. The actual reason it doesn't work for this JMP instruction is it isn't encoded that way. The format of it is just 0xE9 immediate word. Moreover the JMP instruction with the 0xE9 byte is a relative jump. Try entering something like E9 00 00 00 00 in a debugger and you'll see that the address it'll point to is relative to the EIP (instruction pointer). What the code I posted IS capable of is decoding instructions like ADD, OR, AND etc and decode it into formats like these (for example):
ADD EAX, [ECX + EDX*4 + 0xDEADBABE]
OR EBX, 0x12345678
I'm heavily interested in self-modfying code as well. As a matter of fact, I seem to have bursts of programming creativity every few months and I'm always inclined to program things involving assembly/machine language and other fairly low-level things. In my teens I used to dabble around with assembly language a lot and I did write various small .com files which heavily modified themselves.

I just started writing this small disassembler for fun and I already have grand ideas what I want to do with it. I think it would be interesting to create program which can load Windows EXE (PE) files and reorder its contents completely. The program would have to make a list or database of all calls and jumps the program does, and rearrange random codeblocks and update the calls and jumps, moreover swap registers, and perhaps intelligently rearrange instructions within codeblocks (PUSH EAX / PUSH ECX could be swapped without affecting the effective execution).

This actually has been done before in the virus writing scene. Search for the ZMist virus. Still, I think it would be interesting to code something like this myself too.
Borné dans sa nature, infini dans ses vœux, l'homme est un dieu tombé qui se souvient des cieux.
User avatar
Pantheon
Sherbet Head
Posts: 796
Joined: Sun May 18, 2008 2:27 pm
Location: Edinburgh, Scotland

Post by Pantheon »

Thanks for clearing that up Guido, yes if I had thought a little harder I should have rememberd that Mod/RM is only used for certain opcodes. I realy like your idea for writing a polymorphic application. I would love to do the same, but I never ventured into Assembler much, I only learned what I could to help me do some dissasembly and writing self modifying code.
However, if you ever need someone to run an eye over your code or test it, just Pm me or something, I love low level programming. Keep us posted with and developments, plz.

I actualy wrote a small program recently that is somewhat relevent to this line of discussion.
My program can inject code into the boot loader on a usb pen, allowing any computer to boot into this code, bypassing the operating system entirely. The goal was to let me write a small computer game that would fit inside the boot loader, but I never got round to doing that yet, lol. My assembly is still too weak.
User avatar
dono
Sherbet Head
Posts: 756
Joined: Wed Sep 23, 2009 7:38 pm
Location: East Coast
Contact:

Post by dono »

Just along these lines...

I have been working a little bit on kernel programming. Got some boot code working, and a small unix-like kernel going. It's a lot of work though. I have been flipping between that and programming a MUD game framework for fun. First just locally, then when i get most of the framework down, I think i'll get some sockets going and try and expand it to a fully forking client/server MUD.

ANSI C, ftw!
Scott
User avatar
Guido
Dayvan Cowboy
Posts: 1778
Joined: Sun Oct 01, 2006 9:45 am

Post by Guido »

Dono, check your PM.

Making a kernel is cool, I have never done it but I did read about the technical details of it various times. Check out this guy btw: http://www.bellard.org/jslinux/ (requires modern browser). He managed to code an x86 emulator in Javascript. Sheer genius.
Borné dans sa nature, infini dans ses vœux, l'homme est un dieu tombé qui se souvient des cieux.
User avatar
Negamuse
Dayvan Cowboy
Posts: 2122
Joined: Sat Feb 14, 2009 11:45 am

Post by Negamuse »

Oh hey, this is a thread I hadn't seen before... shouldn't surprise me to see programmers on Twoism. Add one to the "it's my day job" list, although I do a fair amount in my spare time too, so it's not just a day job. I'm happy to see some people messing with kernels, emulators and such - high level programming is fine of course but there's a lot of fun to be had at lower levels. One of my favourite little pastimes of the last few years was writing an emulator for the first home computer I ever owned (an Acorn Electron!). I also did some mods for a Java game called Minecraft last year which involved some pretty grody hacking on the raw Java bytecode. Fun though.
User avatar
Guido
Dayvan Cowboy
Posts: 1778
Joined: Sun Oct 01, 2006 9:45 am

Post by Guido »

Cool. Perhaps all we (lower level) programmers should assemble in a chatroom and try to collaborate on something interesting.
Borné dans sa nature, infini dans ses vœux, l'homme est un dieu tombé qui se souvient des cieux.
User avatar
Seeya_Later
Sherbet Head
Posts: 830
Joined: Fri Mar 04, 2011 7:01 am

Post by Seeya_Later »

My planned major is Computer Science with Animation Emphasis.
I like C++ best, only because it's like a standard.
User avatar
Pantheon
Sherbet Head
Posts: 796
Joined: Sun May 18, 2008 2:27 pm
Location: Edinburgh, Scotland

Post by Pantheon »

Guido wrote:Making a kernel is cool, I have never done it but I did read about the technical details of it various times. Check out this guy btw: http://www.bellard.org/jslinux/ (requires modern browser). He managed to code an x86 emulator in Javascript. Sheer genius.
I can hardly belive that link Guido, that is just too awesome. That guy is a realy genius.

I have encountered his work before in fact, as he made a realy minature C compiler (TinyCC) that can be embedded in aplications. http://bellard.org/tcc/. I made a VST a while ago that had his compiler embedded into it, so when you run the vst you can change and recompile the audio processing code at runtime, from within ableton. It was buggy but it was fun to play around with.

I updated my bootsector program with an option to do some basic dissasembly of the boot sector using the diStorm library. Its good for dumping / writing boot sectors. It has a little hex viewer in it, and now dissasembly too. If anyone wants a copy just PM me or post here. It reads/writes to hard disks and usbpens. It could be good for anyone wanting to play with kernels or realmode x86.
User avatar
Stry Craty Bya
Eagle Minded
Posts: 441
Joined: Sun Jun 20, 2010 3:15 am

Post by Stry Craty Bya »

doubleEntendre wrote:buffalo area.
I'm from Buffalo too 8)
Post a reply