What are Your Programming Goals?
Crutcher asks: "I've been walking the murky path to one day becoming a Systems Programmer, and I was wondering what other not-yet-gurus like myself saw as their ultimate goals, and why they choose those fields? Do we all want to hack kernels, or do more want to be UI Gurus, or Deamonic Masters? It would help if we (the proto-gurus) had clearer understandings of where we could go, and what it takes to get there." This is an interesting question. I've discovered however, that the more I learn about coding (including new paradigms and languages), the more my goals have changed. What are your thoughts on this?
I get the best feeling from taking something
complicated and making it simple for
non-programmers to use, kind of like Prometheus.
My goal would be to make high-level languages (functional if possible) really usable - and really used.
Why is it that anyone who wishes to program anything still has to spend half of his time writing things like if ( retval == -1 ) { perror ("frobnicating"); exit (EXIT_FAILURE); }?
Want to make HLL's used? Then use them. Plenty of high level languages are at a point where they're useful for serious programming. I'm rather partial to Python, personally.
Your second comment, about the idiotic bookkeeping involved in C strikes a chord with me. Last week I was fixing some brain-damaged code in a config file parser. I looked at the 25 lines of tangled C code, and realized I could achieve the same functionality with a single line of Python.
C has its applications - I used it when I was writing real-time control systems, for example. But 95% of the time, C is chosen as a default or because the programmers think that coding 'close to the metal' will somehow guarantee them great performance. As a result, they spend far more time developing software that will have far more defects, while running only marginally faster, at best, from the user's perspective.
You are wrong, there are two types of programmers:
1) Programmers who program for profit.
2) Those who live with their parents.
Members of #1 work for companies that:
1) hire programmers to program for them for profit.
2) See #1
Oh, you mean a *real* pimp, not a recruiter.
No. The GOOD programmers seek to do this in one line of SCHEME. People who THINK they are good programmers try to do this in one line of Perl.
You've come across the bane of programmers all over the world. You're expecting some sort of psychic interface to the computer. Some sort of consciousness that lets it do what you WANT not what you SAY. You'd like the computer to have some sort of eyeballs and brain stem to recognise the box that you're showing it "see, computer? This is my new video card! Make it work!" It could be feasible to have the system autodetect the hardware, but that would require cooperation between the software and hardware people. As it stands I can't get any info out of Toshiba as to how to write a driver for its expletive deleted sound card, never mind the entire gamut of its video card options. If all video cards were built to a S-T-A-N-D-A-R-D instead of to "my new and wonderful setup that requires a custom driver!" like things USED TO BE (it was the advent of Windows 95 that started the "do whatcha like, we'll show you how to write a driver" that started the rot.) It doesn't matter how many kinds of hardware you support - I've seen Linux come from days of floppy install to the modern distro's - I tell you, I'd have given an arm for the options you have now, the autodetection and autosetup of a lot of the hardware. But then again, you get some cretin who whines that his ObscuroFetzer Veeblehoozit AG4 video card doesn't work, so the OS sucks. But if you're going to insist on a standard and have everyone build to it, you're looking at a Mac-like or MCA like setup, with people whining all the time that "hey! I want to be able to do my own thing, here!" Windows doesn't work, but it has lots of drivers. BeOS is nice, but has almost zero drivers. Linux works well, and has some drivers.
<TITLE>The Book of Mozilla, 12:10</TITLE>
<BODY bgcolor="#800000" text="#FFFFFF">
<CENTER>
<FONT size=4><I>
<BR><BR><BR><BR><BR><BR><BR><BR>
And the beast shall come forth surrounded by a roiling
<FONT size="+2">cloud</FONT> of <FONT size="+2">vengeance.</FONT>
The house of the unbelievers shall be <FONT size="+2">razed</FONT>
and they shall be <FONT size="+2">scorched</FONT> to the earth.
Their tags shall <FONT size="+2">blink</FONT> until
the end of <FONT size="+2">days.</FONT>
<UL><UL><UL>
<FONT size=6>
<BR>from <B>The Book of Mozilla,<B> 12:10
A lot of my first creations were, looking back, pretty trivial. Still there is something magical about making the box talk, and perform tasks.
I've had dreams of something more complex than I can imagine in my waking hours. Its funny how in dreams you can't add or read correctly (I forget the technical term) but other non-linear problems suddenly become so lucid.
As a developer I work to make dreary tasks simple and simple tasks automatic. But ultimatly I'd like to contribute something, maybe a game -unlike anything that has been before.
I guess consumer acceptance is a big part of success in this industry. It isn't about popularity so much as it is about the cool feeling that other people are enjoying your work. Better yet contributing to it. I bet J. Romero gets a kick everytime he sees a clever Quake add-on that he himself never imagined. What could be better than that?
I think the best advice is general. If you want something more concrete, a bio, here's Richard Stevens'.
My advice would be to treat programming as anything else; it is really a simple thing that will be not be considered terribly impressive in the future. If you want the full, head-on experience, pick up a copy of Godel, Escher, Bach by Hofstadter, look at Knuth's Art of Computer Programming. Think about trying out Corewars. (Don't forget to read the old article in Scientific American.)
If you want to know what the metal is thinking (good to finally understand 'why'), find an accessible book on logic/boolean design. I'll be monitoring this message to see if anyone cares about recommendations.
Perhaps most importantly, have a life outside of programming, interests outside of it. Programming is just an example of one system; think on other systems and you will do well in this special case. And for some reason, you should look at this.
In particular, most discussions of programming are BS (especially when the words 'good' and 'bad' are used; is it really bad or just a failure of imagination?), but there is generally a kernel of truth somewhere in them.
Yours,
Tj
I'm a 43 year old professor in another field (vision science), but I fell in love with computer programming while working on my PhD. I started working towards a degree in computer science last year. I've got 12 credits of prerequisite computer courses behind me now, with 12 more to go before entering the Masters program. I'm doing it simply to learn more about programming than I've been able to teach myself. I don't ever expect to get a job in computer science. My goals include developing my own domain-specific programming language and developing models of the visual system. Whether or not I accomplish those specific goals is secondary to just enjoying programming.
Woody Allen said: "Some people want to achieve immortality through their works; others want to achieve immortality through their childern; me, I want to achieve immortality through not dying."
My software engineering goals are to obtain personal immortality through enabling the creation of a functioning nanotechnology. This includes, but is not limited to, goal based computing, massively parallel distributed systems, partial information computing, and extreme rigor. I write all my code as if it were going to go into a life support system (e.g. a blood gass monitor or a gamma knife control system -- I've worked on both). This means acting as if a mistake can kill you personally, whether or not you actually believe that it could.
Most free software is not up to this standard; neither is most commercial software.
I spent some time doing this. I found that, as your standard of living increases, your desired standard of living increases along with it. Soon, you need ever more money before you drop out of the corporate world and thus never do.
If you are disciplined, you might be able to set some goal in advances and, once you reach it, leave and do your Free Software work without looking back. Otherwise, maybe the answer is to start now.
My long term goal is to continue being paid for playing with computers.
I've slid down the slippery slope of systems administration. I've done technical writing, I've performed tech support and phone firewall. At one point, I've even done data entry. I'm currently a programmer.
My point is that my life revolves around all the things you can do with computers, and I want my work life to always reflect that. Sort of a hacking for hacking's sake kind of life.
Mark Edwards
Proof of Sanity Forged Upon Request
I believe a good piece of that particular difficulty can be traced back to the American National Standards Institute.
When ANSI C was being defined, the standard library was known to have these flaws. It was decided that strcpy, etc. were too widely used to change and the task of checking bounds on these calls was left to the coder.
So, much as we might regret it, we can't blame Canada for this one.
(Source: Some book about RTM's internet worm that I read 8 years ago. I think Cliff Stoll had a hand in the writing but I can't say for sure.)
--Threed
The Slashdot Sig Virus was foiled before it could spread.
I think that's key. There are too many proto-gurus who have it in their heads that they are the next uber-guru. This field of endeavor isn't that much different in that respect than sports. You may be the superstar in high school, among the better players in college, a name on the roster in some farm club and just another fan in the stands when it comes to the big leagues.
Perhaps, but you can certainly be an expert without being *the* expert. While I can't answer every question on comp.lang.c++.moderated, I am the C++ guru at my office, and there's a high degree of satisfaction in solving someone's problem in a minute when they've been struggling for hours with that problem.
Ooh, a sarcasm detector. Oh, that's a real useful invention.
You're going to write an operating system in a graphical programming language?
I think it depends what you mean by graphical programming language. I see it as one where the logical structure of the code is laid out graphically, rather than via indents and curly braces. I once thought of trying to generate something rather like this for writing Unix shell scripts. Shell scripts are notoriously write-only, with long lines of strange characters, and multiple command-line programs all piping into each other. While I put together code to run a mailing list using these tools, it wasn't always the most pleasant thing. A tool where each command was represented by a graphical symbol, with visuals to show how the output of one program was fed into the input of one or more others and widgets on the symbols to set flags and command line inputs, might have made it a more pleasant task.
Ooh, a sarcasm detector. Oh, that's a real useful invention.
I want to develop compilers/languages. I've been interested in this for quite a while. It's the only reason I went back to grad school :-). I just threw my hat into the development of G95 (the GNU Fortran 90/95 compiler). I'm also involved in a project which will attempt to show that Java is parallelizable :).
I used to say computers were only good for one thing: Games. In recent years they've also become an excellent communication tool (email, IM, browsers, in about that order of importance). Everything else is just boring. If it weren't for games and various means of talking to your fellow man, they would be worthless lumps of silicon.
So, broadening the communication aspect a bit, if you don't want to work on games, work on networking. But if you really want to do "Stuff that matters," work on networked games.
It's non-standard, and even by Unix hackers (whose decendents created it), it's considered obsolete since getenv() came along.
Yes well since ANSI accepted C99 yesterday, we can all blissfully ignore C89 (well OK, maybe not until a C99 compiler comes out).
:).
BTW that's interesting about the poor wording in C89. I have to say the implicit return is my most hated feature of C99 (and there are a few questionable ones in there). If this continues, C might be on its road to serious feature creep. Mind you with 10 years between each update, it won't be quite so bad
OK, that's fair.
Though you should note that under both C and C++ (you were talking from a C++ perspective, I assume), declaring main() to be int and exiting without returning a value is defined since the compiler has to add an implicit "return 0;" at the bottom.
Back before there were switching power supplies, CRT devices took their HV, which they need to accelerate the electron beam enough to make the screen glow, from a special winding on the power transformer. This had the advantage of being a reliable, independent source of HV, but it took a L-O-T of very fine wire which was hard to work with. And so began the days of sweep-derived power supplies. Since the most common CRT displays were those on TV receivers, and the sweep frequencies on those were fixed at common values, circuit designers took advantage of the situation and combined the horizontal sweep and the HV generator in one subsystem. The higher frequency of the horizontal sweep allowed them to jack up the voltage with fewer turns of wire and a lot less iron, which was a Good Thing. But the higher degree of interconnectedness between functions meant that a defective yoke (not yolk!) winding not only killed the horizontal sweep, but the HV and the boost also.
When computers began using CRT displays, the TV design philosophy spread to them metastatically, with the effect that a monitor would depend critically on a certain horizontal sweep frequency to generate the power to feed several subsystems. Couple that with the fact that the horizontal output device driving this sweep-derived power supply was now a transistor instead of the more-tolerant vacuum tube of earlier days, and you have a potential source of many cubic yards of magic smoke if somebody changes a frequency to something the designer wasn't counting on.
Nowadays monitors are built to accept wider ranges of input frequencies. They have regulators to smooth out discrepancies in the HV output and broad band sweep circuitry. It takes a little more effort to design and build this way, but when the demand surfaced, so did the designs.
To get more detail on the screen, you have to scan more lines per $unit_of_length, and if you don't want to cut down the number of screens you show in a second, you must jack up the horizontal sweep rate. But there is not, and never has been, any way for a VGA/SVGA monitor to report to the video card what brand it is or what sweep values it can accept without melting into a puddle of slag; ergo, X asks YOU. If you don't tell it otherwise, then, sure, you'll be looking at 640x480, the lowest common denominator of screen resolution settings.
To start with knowing a little bit about absolutely everything, and then expand depthwise from there.
Failing that, be a web nerd until I can become a beach bum full time.
My overall goal is simple: To never stop learning.
My current goal is to be better able to understand complex systems at a deep level with less study than it takes now. I often feel like I'm only scratching the surface of a lot of things I do, and it's a rare and wonderful feeling to truly master something. I'd like to be able to have that feeling more often.
Oh, and to learn to touch type. Hunt-and-peck, even really fast hunt-and-peck, just does not cut it in this line of work.
ANSI dictates that main must return int or equivalent type, and must accept either zero or two arguments. (In the latter case we have the familiar argc and argv arguments, and the standard has something to say about those too.) ANSI does note that a common extension is to permit a third argument (typically envp), but such an argument is implementation defined.
--Joe--
Program Intellivision!
You think I'm joking.
I beleive myself to be, after many years playing alternately with PDP-11's, VAXen, then DOS, AmigaDOS, windows, and Unix (far too many variants of unix to list), to be a unix kernel hacker in a windows world.
My reasons for coming to this conclusion are these:
1. I program almost exclusively in C (I've never got on well with C++, FORTRAN, or anything with the word 'Visual' stuck on the front of it)
2. My 'speciality' is in the bit-twiddling, string bashing, hairy linked-list world of low level data manipulation.
3. I work with unix firstly because if my latest list processing masterpiece is buggy, I'm likely to find out with a simple 'Segmentation fault' message, rather than find that my disks have got all screwed up. That, and (dons flame-retardant underwear) vi of course.
Apart from building hardware, and doing generally interesting system administration type things on the company networks, I also write a lot of the low level code, which other people build flashy user interfaces upon. This means that I sometimes work in kernel mode, and this is somewhat reflected in most of my code. I like to think that it means that the code will cope will with idiot users above trying to do stupid things with it.
In a way, then, I think I have already reached my 'goal'.
I dislike user interface programming, or intense mathematical code; and I've found a team where I can avoid doing that.
Unfortunately, I have to write code for windows boxes. Atleast we have now left the 16bit world behind, so I can malloc(lots) instead of calling one of several different malloc()'s depending on the type of memory I want, etc.
So, back to the original point. (I may have got a little lost here) If you want to work at the low level, do it, but you have to learn to work with a team if you don't want to do all that user friendly GUI stuff. It helps a lot if the people that do want to do the GUI stuff are unwilling to write their own list processing code, etc. because that way, you get a good supply of jobs to do that prevent management from assigning you to some horrid graphics thing.
Uh...I burned up a monitor faster than I could hit the power switch in 94.
Burning up monitors was pretty expensive, and fairly common when XFree86 came out.
Joe
Joe Batt Solid Design
okay, since you ask... I like programming daemons. services. backend stuff. anything that doesn't have to deal with a user interface; let someone else do the UI part, preferably in another process, and connected via a socket. And, in general, I like to do these things single threaded, with a central poll() or select() loop.
Go to dice.com and search for programming jobs in the advanced search with the field of telecommute. It tured up printer driver, sound driver, and many other jobs you'd probably like.
Joseph
I currently am a proto-guro like yourself. Currently I'm enrolled in my school's computer engineering major. I was initial drawn that major because I think the degree opens more doors then just plain old Computer science. I know many CompEng majors who are doing comp sci jobs, but no comp sci majors that are doing any engineering work. That's why I picked that Computer engineering, but recently I've been tempted by the dark side. I'm contemplating taking my school's Information System Technology major. I'm tempted because that is where the majority of my work experience is, and I'm frankly better at doing support work than coding (not that I've had much formal training)
I think we just lean towards our area of expertise. what ever we have a gift for and we enjoy, we will find and end up doing. just keep your eyes open.
I post links to stuff here
Strousup gave us istream::operator(char *) with _exactly_ the same problem
If you're going to use an istream you might as well use std::string. I always use fgets anyway, just train yourself early and ignore that gets exists.
Scuttlemonkey is a troll
Well, technically speaking, there are three arguments. Most people forget to pass the environment, which is env (char *env[]).
All editorial writers ever do is come down from the hill after the battle is over and shoot the wounded.
life ends so quickly
leaves rustle, anticipate
carbon circles roll
a small insect, i
buzz through the leaves, eyes open
each breeze a teacher
code wake, wake and code
swarming alarming, farming
pollen for all leaves
beautiful trees grow
drowsy sleep, temporary
night. we die we live
Disclaimer: All this is MHO, and this might not be the right path for you. After 8 years in industry (an evil global corporation -- gotta pay for my Ferrari somehow) I found that code-whacking for industry isn't much fun. Sure, it used to be fun -- the thrill of bringing a project to life with your own ten fingers. Then something changed. All of a sudden I caught a "re-use" bug with a vengeance. I no longer felt that I should roll-my-own just because I didn't like the API of someone else's library. I started to lean towards the "buy" side of the buy-vs-build dichotomy. I can hear the groans now. Yes, I choose open source products if they exist rather than fatten corporate wallets. Well, once I stopped being a guy who would hide out in his cubicle and emerge when the job was done, I started looking at how the whole project was put together and managed. I learned about a whole other IT profession: "IT Project Management". Deals with scheduling, resources, budgets, and ordering people around :) Well, you can't order people around because project managers don't have that authority. Project managers shepherd a project to its conclusion (but not further -- that's the job of a program manager). Some would say "herd", since sometimes that's what it takes to get things in on time. Anyway, that's life after professional coding. Project managers typically (at least in established companies) make 2x-4x what a seasoned developer makes (just to satisfy the "but how much does it *pay*?" crowd). Of course, that's just by day. By night I'm an open-source Java coder :) No-one said I had to actually give up coding. --Robert Baruch www.linuxstart.com/~groovyjava
Only goal I have is to be like Bill Fucking Gates. To just say like "Duh we want to do this" and then have a team of devoted worshippers actually do it too, and then convince the whole world of his righteousness, even though I cannot even spell that word.
Ad of course, I don't have to use my left hand anymore to operate the mouse because my right is suffering from some serious RSI.
GCS/MU d- s+: a- C++$ USH++$ P- L+> E W++$ N o-- K- W++@ O-- M- !V PS Y+ PGP- t+ 5(+) X- R tv? b++++ y++(+++)
My primary goal in coding is to have fun. The projects that I seek out will be those that interest me and look like fun to work on, as opposed to projects that fall into any given category or serve any given goal.
My major programming interests include graphics, simulation, and complex data processing, but I've dabbled in AI, drivers, user interfaces, and may other things. I especially enjoy being able to define my own implementation structure when solving a problem, but I still enjoy extending others' structures as long as what I'm adding to is already clean and elegant. I also enjoy making things elegant and easy to work with; rewriting code for modularity, simplicity, and style, and writing documentation and manuals (yes, I actually produce documentation).
Summary: There is no one set of interests that drives me, and I suspect that true gurus have similarly broad collections of tastes.
Not all slashdot users use their real names.
-B.G.
Basically, want I want to do is make sure that RedHat and ESR keeps making money off of software I make, for free.
Another goal is to get more flames about why a certain feature has not been implemented in the software, why I don't choose a more free toolkit, why I bothered writing a clearly inferior product when there are other free ones out there, and how much I suck by people who never used my app.
Ah, I love being a programmer.
Je ne parle pas francais.
Sorry if I was unclear, but my point was that you can get more assistance with calculus from a calculator than with programming from a "Wizard". The impression that I'd had from some of my friends was that their leeto TI-92's were damn handy during calculus. (Plus, my friends know enough to program some pretty good stuff) Of course, you won't get ANYWHERE in either field if you know nothing about it.
I'm of two minds about this post.
First, I think that the spread of open source encourages people to learn a bit about code, and provides them the means to do to (I learned more reading code than reading any book). Computers are also becoming more affordable, which is bringing them into the hands (and homes) of more proto-geeks. I'm sure that these will increase the total number of programmers "out there".
However, I recognise that there will always be a lot of programmers that aren't *good*. They code as a hobby, without really producing anything reliable or useful. Just as calculus spread to high school (I've not seen it in middle school myself), programming will, too. However, I think that most languages are more complex than calculus, and plenty of people fail calculus. Calculus can be done with a calculator, but I don't know of any "Wizards" that can get you through a complex programming problem. If you plan to write code, you have to know what you're doing.
Programming might someday be less "elite", but not much.
Did you read the other part?
"However, the video card makers made each card access this in a different way, and the code to access this is in the video card BIOS and runs only in X86 real mode. Not good, when you are running X86 protected mode (Linux/86) or on something else (Alpha, PPC, MIPS,....)"
It's once again hardware design that causes the problem. They are working on it, but bringing up a virtual real mode processor just to read the fscking monitor information seems a bit like over kill, don't ya think? I don't imagine that was easy to do.
Now if the hardware design made more sense, then there's a good chance we would have better software (less time needed to work around stupid issues like the above). Not only would it be better, it would be smaller, cleaner, and less likely to crash and burn. Not to mention easier to maintain farther into the future.
Part of the reason a lot of software sucks is because almost every time some new hardware company gets a large crazy idea everything needs to be rewritten or hacked up to keep working (which is why we are still stuck with x86, etc--hacking up and rewritting would have been too expensive/time consuming even though there is better hardware to run on out there). Video cards are the *perfect* example of this problem.
My $0.015
l8r
Sean
Hexy - a strategy game for iPhone/iPod Touch
And if it's going to ask me what my monitor is then it should believe me when I tell it the answer. I've had linux tell me I gave it the wrong monitor info, if it knows enough to tell me the info I gave it is wrong, why doesn't it give itself the RIGHT info? It's silly.
Hi. I'm really curious about a few things.
1) What the hell are you talking about? Linux doesn't care at all what monitor you use. Are you meaning to say 'X windows' is wanting that info or are you meaning that "linux" wants 'my monitor's refresh rate capabilities?'
2) What distro are you using that does all of this?
3) Why has no one else asked you this?
If it pisses you off so much, don't use it.
Thanks,
Blue
i browse at -1 because they're funnier than you are.
... to write perl programs people can read! :)
----- if ($anyone_cares) {print "Just Another Perl Newbie"}
warn "Just Another Perl User" if $anyone_cares;
I intent to be such a good programmer that I'm sent to space to handle the plethora of network problems that must exist up there! Zero-G linux installs!! Oohh Baby!
An eventual goal in my life is to write some form of program, whether it is a game or a GUI proggie which will be looked at followed with the words "Damn that's kleen" or "Damn that's krispi"... or... well... something to that effect... I just want the recognition of having done something that... at least for it's time of release... was beautiful to the eye ;)
Incidentally, I would imagine that there are almost as many reasons why people program as there are programmers!
...
I am nowhere near a guru, but I mostly program because:
1) I want to make things that facilitate biological research (which is dealing with more and more data every day, thanks to the high-throughput sequencing efforts and other recent advances in technology).
2) I enjoy solving problems. I enjoy working through programming-related problems, but I'd probably enjoy problem-solving in other career areas, too
Of course, when I was young, programming in BASIC on our Commodore 64, I just knew it was good geeky fun that I couldn't admit to my non-geeky friends!
:-)
-- YS
"Arrr! The laws of science be a harsh mistress." -- Bender
Perhaps he wants some music to go along with "it's" programming...
Perhaps he's just a frustrated luthier...
Perhaps he's working on dostuff() for the cello too... it would go well with Haskore...
Ah well.
(P.S.: Yes, the viola/voila mix-up also bugs me. It brings to mind the dirty little detective guy from Moonlighting - was it Stephen Rea?)
To the editors: your English is as bad as your Perl. Please go back to grade school.
Well, one thing I've found in my relentless climb up the academic ladder is that the higher you get, the less of a consensus there is about it. This is especially the case when everybody with whom you hang out has designed dozens of languages of his own (and implemented at least one... hopefully! :]). Nonetheless, everyone seems to consider at least one of [Lisp, Prolog, Haskell, Eiffel] to be a "good" language. (Inasmuch as, at any given moment, they're reinventing one of them to include a certain desired feature, that is.)
:)
Of course, the prevailing mindset here is, "if it's widely used it can't be any good!", so this is a moot point
To the editors: your English is as bad as your Perl. Please go back to grade school.
My goal is to be useful to either yourself
or the others. This means to produce software that
makes life more funny or easier.
Hacking an ultra fast kernel is nice, yes, but
the real thing is to know that there's thousands
of people saving time and money by using your
program..
Don't set out on a goal to write the next desktop or a 3D flight sim, cause you'll just end up disappointed. Remember - hacking is supposed to be fun. Just **PLAY** with the things you're good at and extend/merge these skills with new ones as you come across new systems and APIs. By all means have some ambition in your head, but don't try and implement it until you're ready! Write bits of it. Don't write a 3D flight-sim.. write a landscape renderer! Then a realtime voxel landscape viewer.. anything you get to play with. By the time you're approaching hacker status you'll have a huge directory of good code, bad code, funky experiments and a whole directory of trivial apps on freshmeat that noone uses :-) remember - *experiment*, *play*, *be cool!*
I have a nearly non-existent knowledge of real programming. Sure, I can get around Windows just fine, but can I really make it do what I want? No.
This summer, the IT department of a Fortune 500 company may offer me a (volunteer...) position programming an MS Access database. I don't know Access at all, but the beauty lies in the fact that there will be on-the-job learning.
In my spare time, Linux is on the list of "things to learn" for curiosity's sake and for practicality. (My family lived in a Commodore world from about 1986 to 1992, and then Windows from now until the present. Jay [brother] has gone on to higher education and picked up experience in all sorts of different environments.) That'd help me out, too, in the future...
My plan currently is to obtain a cognitive science degree focusing in linguistics and computational approaches to cognition. But there'll be a lot to learn on the way there.
void main is perfectly valid, and given that he didn't bother to return a value from main, int main would have actually been an error.
-Ted
I think the best way to answer the question is to ask what you want to achieve with technology. I went into programming after being a secretary as I saw potential for automation and efficiency being squandered. I went from a VBA programmer to a Webmaster/Developer, but my goal is still the same - do it faster, better, and automatically.
I also find deciding what you want to do with technology helps set your education goals.
"The Sage treasures Unity and measures all things by it" - Lao Tzu
kmj
The only reason I keep my ms-dos partition is so I can mount it like the b*tch it is.
kmj
The only reason I keep my ms-dos partition is so I can mount it like the b*tch it is.
I have to disagree. I think the unstated goal of the original poster was to become The Best Programmer Ever (tm).
I know that's my goal. And my method to achieve that, just as the original poster, is to better express myself and the problem set through code. Things like "a linux desktop" and "an application suite" are things that may or may not drop out of that, but they certainly aren't the goal.
That would be like setting daily goals to "put on my shoes", or "brush my teeth". That's silly.
And just like golf, the purpose of my goal is self fullfillment. I could care less whether there is a working desktop. Neither to the people working on Gnome, I suspect... I think they are all just working toward being the Best Programmer Ever, and Gnome is just fallout from that.
Y'all are just figments of my imagination anyway.
As I understand it, one of the purposes of Java is to support effortless multiplatform operation. For this reason, a .java file is compiled into a bytecode .class file which can then be used on any platform which has a bytecode runtime engine. In other words, the bytecode engine becomes the singular platform for which Java programs are written.
Cretin - a powerful and flexible CD reencoder
I'd be working for the "life-goes-on-since-our-application-comes-from-a-b uyout-and-we're-already-competitive" company.
Seriously. Everyone on Slashdot thinks everyone in MS is a monopolistic fsck. It's simply not true. The stuff that we're doing right now with Network Documentation, Reporting, Design, etc... NO ONE else is doing it.
MSFT didn't innovate this stuff, by the way -- we did prior to being purchased in January. MS just bought it.
-LB
I'm a systems programmer by choice, simply because I can't stand the nattering of managers and pundits about UI usability and whatnot. There's nothing worse than a self-appointed expert with no technical background telling you what to do.
As a result I write database backend object model code and T-SQL for a Network Documentation tool.
The code that I write is in use by over 100,000 companies right now, and helps to generate tens of millions of dollars a year.
Plus, I get to learn neat-o technologies, and espouse OpenSource technologies within the monolithic giant that is M$. Believe it or not, there are a ton of Perl users here at M$.
-LB
1v 0n133 hAx0rd f0r a m0n74, & 1 Kn0 3vr1t41ng a1r3d1
1v g0t a11 t43 1337 5kr1p75 & r00t 0|\| 1075 0\/ 80X35 & z11110n g1gz 0v Pr0N
g355 175 d1fr1n7 f0r 1337 d00dz 11K3 |\/|3 !!!!
[takes a bow, thanks the Academy and all the "little people" who made this possible ^_^ ]
Some day i want to write either or both: An all encompasing adventure game, a simple modular OS designed to make programmers' lives easier by being free of all evil legacy features...
Now i must get back to work wrting dull business software so i can pay the rent =:-(
---
Play Six Pack Man. I
Simple standard supported graphic or glyphy type pictography type deals to represent "If...Then" stuff and "Do...While" crap would keep you from typing the same grammatical declarations all day long.
But would it really be more efficient to have to create and connects some glyphs? I think typing is much more efficient than creating icons, dragging & dropping them, and then connecting them - as long as you are using a sufficiently high level language like Perl or Python. Though I started out as a GUI junkie and initially hated command line interfaces, I am much more efficient working with the file system from the command line than through a Macintosh Finder or Windows Browser. But I can see your point - for some situations, things like "Lab View" are really cool.
I like to see how things work. I like to know how to use and manipulate these complex toys. Programming is a way to do it. It's a way to explore the relationship between Hardware and Software and between OS and application. It's like doing a crossword or jigsaw, just infinitely more complex.
That and I can make money doing it.:)
IMHO, as per.
J:)
Oh well, no point in steering now.
You know, reading this I'm reminded of those times when you make a conceptual breakthrough and say "Ah, I understand."
Those are the times when I feel like a god. Those are the times when I feel surprised that I'm actually paid to do what I do.
anyway...
J:)
Oh well, no point in steering now.
When a programmer says, "I know C++, VB, VBScript, Perl, Java, PHP, etc...", what exactly does that mean?
Does it mean that they have a high level of proficiency where they know all of the intricacies and idiosyncrasies in each language in their list, or that they have a basic understanding of the syntax and could at least get "Hello World" to compile?
Maybe I'm just trying to figure this out to calm the uncertainty of my own inadequacies.
load "linux",8,1
Well, as a gradutate in physics, and chemistry, and currently doing an MSc (one year postgrad course) in materials science, I'm not intending to become a 'guru', in the conventional sense.
I have a strong interest in programming, but no formal training (and not likely to get any), but rather than wanting to write the next killer app, or make improvments to an OS, I use programming to do mathematics.
Most of the code I've written so far has been mathematically orientated stuff, for a specific purpose.
That's not to say I don't use other software, just that it's not the stuff I write. For example, next year, I'll be writing Fortran to run on supercomputers, to calculate electronic band stuctures of solid state materials. Right now, I'm writing code to similate what happens when you shoot an electron beam into a polycrystaline semiconductor.
I suppose, therefore, you could say that I am algorithm programmer.
I reckon it's a often overlooked area. Basically, that's because it's seen more difficult, purely because you need knowledg in more than one field - computing being only one, mathematics being another, and possasbly also a third (if, say, your working with speech, or physical simulation) [see, for example, the bible on algorithms, "The Art of Computer Programmming", by D.E. Knuth, a mathematician.]
It's not as sexy as GUI or OS design (people don't see your stuff, and it's more specialised), but it's just as tricky. Working with algorithms does tend to have fewer logical bugs, as a full formal design is (practically) required, and proven to be mathematically correct.
Actually, for that reason, I'd reccomend people to look at algorithmic work, particularly if you have a strong mathematical bent.
Of course, I'm just spoiled from years of Winduhs, Macs, BeOS, NeXT cubes, etc.
-jpowers
-jpowers
And the last 5 years has really proven this:
1) Programmers who program for profit.
2) Those who don't.
Members of #1 work for companies that:
1) hire programmers to program for them for profit.
2) hire programmers to program for them for non-profit purposes (eg, GPLed code)
The next site to slashdot will be ready soon, but subscribers can beat the rush and start slashdotting it early!
1 = "L" 3 = "E" 7 = "T" so "1337" = "leet", which is "Elite" (think of it as 'leet. Honestly: I think these kids grew up on 'B' movies!)
:)
I've grown up around computers and been programming now for 12 years (at the age of 20). My goals have matured and pushed me to further my skills and will continue to do so. There isn't a universal or ultimate set of programmers goals as such, instead your goals reflect your current skills and the direction you want to head into.
I've grown up with the goals varying from learning C/C++, learning how to use Mode-X graphics, doing cross-fading, writing in 8086 assembler, and programming a soundblaster in DMA mode to things like becoming fluent in Java, OpenGL and other higher-level systems.
Some of my current goals are to better logically deconstruct my tasks into the most simplistic and generic objects possible whilst still maintaining efficiency and intuitiveness. As you might have guessed, these goals are aimed primarily at C++ and Java.
My point is that everyone will set themselves different goals. Unlike the sports and other careers, computing doesn't really have any upper limit or Apex of acheivement other than what you set yourself. (In sport there is the Olympics. In most industries you can aim to be the best. In computing, there are so many skill combinations that there is no single 'best'.) Your goals are defined by your ambitions and your current skills.
And if someone questions why you choose a particular programming solution just tell them, "No reason. I just like doin' things like that."
Extra credit for those who know from where the above quote comes from.
---
--
If I actually could spell I'd have spelled it right in the first place.
If Linus had believed in that, Linux wouldn't even exist.
Bitter you may seem, but still your words ring true, though you missed a few:
- Trying to juggle with all the projects you ever done while working in your company, that keeps coming back because of poor understanding/maintaining of the maintenence crew.
- Trying to save projects from dying because of poor managment.
- Screwing your fine working code just before deadline because the customer/project manager suddently remembered that 70% of your input on what to code was wrong or out of date. And he's known it for months.
- Working fanaticly day and night to meet a deadline, only to find out at the deadline that the customer dosen't wish to go live for another 2 months.
-H
* We should make a dead programmers society...
At times I come across this attitude and I get stunned each time of how childish adults actually may happen to be. It reminds me of a child I once saw, whining and yelling at its parents, because they bought the wrong icecream.
Linux/Xfree86/RH6/... is offered for free. Yes free. Free as free speech AND free as free beer. I don't drink beer (true!), but I don't whine when somebody offers a free beer. I don't like it, and I just say: "Thanks, but no thanks." That simple!
Xfree86 may at times take a hassle to get to work. I can resist the temptation to compare to other X servers or displaying systems, because it isn't the point. But it does take a hassle. If you mind, go buy a workstation/VA box/X terminal or even another kind of system like MS Windows; it might even be cheaper if you are in business hours. Go do it!
Open source software serves a higher purpose: It is a university! You may be enrolled for the cost of a spare partion on your harddisk and participate in making a system of your choice. It is not finished yet, but you may put your thumbprints on it and learn something too. You don't have to, but it is the offer.
As said: There is freedom here and it goes both ways, take it for free or leave it for free. But do me this favour: Don't insult those that give you stuff they used their sparetime to produce. You are handed an offer which you may decline, but do it politely, since the guys are doing it for the sake of goodness, not to make you unhappy.
:-) = I am happy
:^) = I am happy with my big nose
C:\> = I am happy with my OS
Then try to get promoted above IT...and try...and try...and try..
That's why, if you're going to go management, you need to get something like a PhD in Economics and get into the Line managerial positions. But IT management is like HR management - almost always a dead end.
It's not because you can't do it, it's because other managers will always think of you as a geek, and even in tech firms, geeks aren't let out of the cage unless they own the company.
That said, lawyer jokes are way more popular. My brother is so sensitive about that. IT jokes aren't quite as bad.
Will in Seattle
Yeah, if you go for an economics degree, you can work anywhere in business.
That said, when programming: don't reinvent the wheel, unless you really like wheels and you really have a better solution. I've seen a lot of performance tire wheels in my day, and a good general wheel is far preferable.
Just like video cards - I don't want to have to know what the card is, unless I'm doing a high-end gaming system, I should just be able to use it. Don't get caught up in the details, unless it makes you very happy when you do so.
Oh, don't ever get into IT management - no other manager will ever respect you, the hours are worse, the pay hardly better at all. If you want to do management, get in different lines of business in different functional areas.
Because, if you go management, they don't let you code very often. If coding turns your crank, you'll wonder "what happened?" when you realize you just do meetings and never have fun anymore. At least in line management they let you play golf or go surfing in Half Moon Bay.
Will in Seattle
You seem to be saying that the IT industry can be a crap place to work. Are you a hacker, as a separate thing from being a professional programmer? Do your comments apply to non-professional projects and stuff?
perl -e 'fork||print for split//,"hahahaha"'
My one and only long term goal is to become the best developer that I can be. But until I mastered that (which I never will) I set a large amount of short term goals. Setting short term goals will help you see results faster. If you sit down and say I am going to be the next Alan Cox, or whatever, you will become increasingly disappointed in yourself and ultimitely fail. But if you sit down and say, "Today I'm going to write a function/program/script that does X" you will be able to reinforce yourself and find multiple uses for that small X. Also, I find it best to do as you are doing, check to see if your goals are inline with other similiar minded people. Watching the goals of those people will also give you an idea of where programming and technology is headed. If all of you peers are starting to look at Internet based languages and your trying to master COBAL or FORTRAN, maybe your goals are a little out-of-sync. (Not that i'm saying COBAL or FORTRAN are bad) Now that i've done my ramblings, I will allow you to go back to your normal browsing.
I code because I enjoy a challenge. I want to learn more and more. During my courses and my hobby I've learnt about everything from politics about software through UI to some kernel programming. As soon as I master something I let it go and try something else. My ultimate goal is nothing. I do it because I enjoy going towards my goals
I never wanted to be a software analyst, stuck in a cubicle all day like a hamster stuck in the page.
I wanted to be...
I wanted to be...
I wanted to be...A LUMBERJACK COMPUTER PROGRAMMER.
-
1. Eat lots of Plastic and high caffinated foods
2. work long shifts >= 20 hours
3. use code in normal sentences (see #2)
4. make sure you work in a corner that is musty and dark
5. don't get out much
6. drive yourself to insanity and then ship/release product before you snap and go postal.
i'm only to the 1st one and only halfway there...can't seem to injest plastic like others.
JediLuke
JediLuke
-Do or Do Not, There is no Try
!!
/const/ pointer cannot be modified"
So this is why the editors at Osborne haven't responded to my (polite) assertion that Schildt's statement
"Also, an object pointed to by a
is in error.
There is a spellbook here; eat it? [ynq]
> Viola You are done
What does the musical instrument have to do with your program?
=)
There is a spellbook here; eat it? [ynq]
A man walked into a pet store and saw three monkeys sitting in cages. Under the first monkey was a sign - "$20,000". Amazed, he asked why so expensive? The shop guy said "he's a C monkey - write great code, works for peanuts." The next monkey's sign read "$50,000". "Oh, he's a C++ monkey - does OO design too, very clever." The last monkey sign said "$1,000,000". "Wow!" said the man. "What does THIS monkey do?"
"I don't know, but he says he's a contractor."
Sometimes I hate it and think about other things I could do, and there are a lot of choices open. I think of it as a bit like golf. Remember your first game of golf (if you've ever played)? Frustrating, I bet - except for that one shot that flew straight and true in an delicately skyward arc before coming to rest, in plain sight, sort of where you wanted it to be. Programming is like that. Those days when you FINISH a big project (and have a beer with the QA people you wanted to kill the week before), or the times when you write 500 lines of code with all kinds of heinous pointer transformations (and it works first time), or when you think up some new and novel way of doing something (in fact so cool that you hope the patent lawyers don't make you write up an application) - those days make it worthwhile.
My goals, as stated, are to make money. It's a good field to be in if you have that goal and I think it will be so for a long time. Dismantling the Microsoft hegemony is a worthy goal too, as is perpetuating the Microsoft hegemony :-) Whatever floats your boat. Personally I use what works, pay for it if that's what the license says, and don't much care who wrote it. Once I've made the money I'll be a recreational programmer, then I can get into open source full-time.
The thing that will most decide what your goals are is your personal interest in technology. What you like using, and what you feel is important, will change the world, whatever, that, more than lucrative job offers in other fields, will decide what you do. At the end of the day, if you derive no personal pleasure from what you create you may as well become an accountant. I went for embedded because I like to build things that ordinary people use - it's a buzz to know there are millions out there! Another factor might be language. I get to write in C, and rarely see anything else (maybe some assembly).
Getting there can be difficult. You will most likely spend anywhere from two to twenty years maintaining, porting or otherwise having to deal with somebody else's code. And you will come to know that nobody else in the world writes code just the way you like it written. You probably won't get to do your own stuff from design to test plan for a while, but it happens eventually. When you're there then you've arrived.
Of course if you an elite graphics programmer who has sold 2 million units in Wal-Mart (but nobody's ever heard of you, or your company, and your website doesn't appear to exist) - pick up Visual Basic, and stay there. You're only fooling yourself :-)
I burnt a monitor just last month. And when I say burnt, I mean burnt. The smell didn't go away for a day.
Damn clockchip...
---
END OF LINE
I started as a programmer for $11k a year in the solid core of the Reagan Recession. My goal is to die at my desk of doughnut inhalation. I'm hoping in 20 years, I will able to write a COBOL app that will kick a Java+++ app down a flight of steps and leave it crippled for life.
CIO - A light-skinned version of Gunga Din, he's pretty boy who believes everything he reads in a science fiction novel should be implemented in a week. His primary function is to figure out what "casual" means while bowing and scraping to everyone above janitor. See "clueless dipshit".
Administrative Assistant - a comatose, gun-chewing zombie with a candy dish who can change a highly-paid executive to a quivering bowl of pudding by threatening to take a vacation, leaving him to fetch coffee for himself. See "shaker".
If you aren't part of the solution, there is good money to be made prolonging the problem
Being that there is nothing else posted that truly grasps the nature of how one might feel when setting and trying to attain goals, I would have to say that this would be the main basis.
I have spent the past 6 years trying to learn how to code with some type of efficiency, and what drives me, and pushes me on, is my desire to see my own finished product, and to know that anyone can go inside of said finished product and read and understand exactly what I did to accomplish my goal for that project.
I have to agree with the overlying question though.. how do us small time, wanna-be big-time people with a head full of interest, find what we need to accomplish the things that those before us accomplished?
It's not too simple, but the basic answer would be.. find one of the said gurus that you know exist, and hope that they don't shrug you off and give you the bird. Once you have that guru to bounce stuff off of.. and they can take the the emails of long questions and your disorganization, then you have found what every beginner, mid-class programmer needs.. someone to share the experience with and someone to critque the material.
Thats just my opinion though, and since thats how I am reaching my goals, I know it works.. atleast it works for me.. seems to work for my guru too... *wink jor*
- DL
. o O ( Those Voices in my Head Won't Shut Up ) O o .
Welp, I'm not a codemonkey, but if I WERE, I'd be working on just programming things that work. Period. I guess because I'm a hardware gimp, and I hate running into software that goes bonkers with a slightly different hardware combination.
But, come on, why the FUCK does linux need to know what kind of Monitor I have? Just send the bloody info to the bloody video card already...
I think all you programmers should stop working on 'Newest, greatest, spiffiest' and start trying to get the existing stuff working. Things along the lines of Mozilla. But do it for all kinds of things. We need more robust software, not more interesting software!
Kintanon
Check out JoshJitsu.info for Brazilian Ji
The obvious goal every programmer really has deep down inside, is total personal world domination. The ability to crush the lives of millions of people on a whim, the ability to make nations tremble, the power to get anyone to do whatever you want them to!
The GOOD programmers seek to do this in 1 line of perl.
Trees can't go dancing
So do them a big favor
Pretend dancing stinks!
For a change I would like to make my business partner's life happy by implementing a solution that would make his life easier, or save a buck or two or maybe earn a dollar or more. Programming is a means to an end for me. The end is customer satisfaction. I am satisfied by the means. I help the means with better modelling, scenarios, diagramming and documentation. Helps the guy who picks up my pieces to understand it better instead of figuring out million lines of code.
It is also your attitude towards the degree that matters. You can think for yourself and look around. Find that which is cutting edge and focus on that. Getting a CS degree should also mean that you have to think for yourself and do research on your own (at least that is why you write a thesis in the end).
No-one is asking anyone to confine themselves to the courses offered. We can for instance get cu:s for different subjects by reading books and taking exams, because there isn't enough interest in certain fields to warrant a lectured course. I'm sure many professors would gladly help people with their interests as long as the interests are scientifically oriented.
BTW, relevance is highly subjective. I for one consider theory of computation, analysis of algorithms, compilers, formal methods, and generally anything else in the hard core of CS highly relevant and most of the new hyped "innovations" (Java, etc.) less relevant. Also I'd really like to see a lot more of dsp, soft computing, and numerical methods in the CS curriculum as well as high level programming languages and pure math. OTOH, I work as a researcher, which is not everyone's cup of tea. But I know for a fact that you can get very interesting jobs in the industry with a skill set in theoretical CS, but most people won't go far enough, since it is hard and requires a lot of work. It is far easier to learn a programming language and take a job in programming.
Yea, I know what you mean.
I'm not a programmer by trade but I got the opportunity to play with a scripting language at work for the past few days. I've noticed that I've been going 3-4 hours without a break.
Not bad for a smoker who lights up at least hourly.
Hmm, maybe a change in career is in the works.
So much to do, so little bandwidth.
--
Try Mozilla
i can remember when i first got interested in computers as a child i had no idea of breadth of vision of how much there was to learn and i felt i could learn "all i needed to know" in only a short time...yet i've never even come close to reaching my goal..it's true that it seems the more i learn about computers the more i realize i want to learn...the amount that i want to someday know only seems to grow exponentially with my wisdom!
i learned python, then i wanted to learn perl....
i used Linux, then i wanted to use FreeBSD...
ad infinitum...
I'm 18 now, and I started in grade 8, so, that's umm, since 13 yo. I feel like I'm really struggling to catch up - I mean, I'm really into a lot of this stuff, its just that between school and everything, I'm wishing that I had more time to dabble in this stuff. Yikes :) I mean, I've learned a fair bit of windows, a good amount of linux/unix in the past two years, networking, a bit of security stuff, website design, php, tcl, etc... but I still feel so behind because I've still got XML, C/C++, Corba, good object oriented programmin (just started trying it in php) and network security stuff. At least im ahead of people just starting out, but theres so much to learn. If people start setting a goal to be a 'kernel guru' I dont think they'll ever reach the goal, because as soon as it starts getting too easy, it stops being fun, and you start on something new.
Be honest: how much of your time programming do you spend doing things that are really new? Most of the time, the shortest way to a solution is not an expressive language, but the ability to find and reuse code that solves straightforward problems. This is especially true now that we have the Web and searchable on-line code libraries. The size of the community using the langauge can be more important than the utility or safety of the language itself - if language X makes you ten times as productive, but there are a thousand times as many people using language Y and their libraries are broad and deep, you may be better off with Y.
When the problems are unusual, one wizard with the right tools can beat fifty drones; for most programs written today, high-level langauges don't buy you all that much.
As a long-time Lisp hacker, I gnash my teeth and wail as I say this, but it's all still true. Go find a copy of Gabriel's Patterns of Software and read the chapter entitled "The End of History and The Last Programming Language" for further depressing reading.
To a Lisp hacker, XML is S-expressions in drag.
Myself, I write software for its own sake. From "The Tao of Programming:"
Thus spake the master programmer:
A well-written program is its own heaven;
A poorly written program is its own hell
Personally, I strive to be a better programmer so I can be a better programmer. I enjoy books like "The Pragmatic Programmer," "Programming Pearls," "Code Complete," and "The Essentials of User Interface Design." (and any of the gospels according to O'Reilly) I would recommend focusing on understanding and writing good software that solves a problem elegantly and well and not getting too bogged down in a particular technology. Instead of learning Java, for example, learn OO and see how you can apply it to Java. Don't memorize syntax and details. That's why The Buddha gave us bookshelves. Certainly, don't get bogged down in "This OS/tool/paradigm/language/editor is better than that one." Each of the ten thousand things is not the true way. The way is the true way.
Just remember to have fun and find the flow. That's what is the real reward, IMO: the flow.
Ah, I remember hex-editing saved game files and application binaries alike to get what I wanted out of a game. Tradewars 2000, anyone?
I don't consider myself a programmer in any degree, but I am, however, a master at HTML. I know its not really that simple a language, but I've managed to put together many SOLID, WORKING, web-sites with graphics that fit and decent colors. I abide by the rules of neat coding and I am a master of photoshop 4. People are always asking me questions about HTML and Graphics and things and I think to myself "If only I was there to help me out in the beginning". I think this means that in order for up-and-coming students of any school, upper-classmen or just people who know more should help the lesser ones to get better. I learned on my own, and as a result I gained an intimate knowledge of standards (because I drew my knowledge from many good ethically designed sites) but had somebody guided me on earlier I could have learned a little faster, maybe even moved on to programming. Right now I'm trying to learn C++ in my AP CS class and Perl on my own. I'm getting help from people who know more than me and its helping me alot. So basically... if someone you know is trying to learn, give em some knowledge. I can't tell you how many times I've taught flash or tables to people.
It seems so amazingly simple, but all I want is to write well written code on interesting projects. For me, that currently means using an OO language on a Unix-esque platform to write some kind of non-trivial distributed application.
I used to want to be a games programmer (let's face it, the testing phase would be alot like how I spend my free time anyways). Then I wanted to write compilers and languages, then kernel hacking held my interest. But I have found, that in almost any field, there are interesting problems to solve and interesting code to write. The important part for me is to have some input on the design/architecture phase so that I feel like my time is being spent implementing a well thought out design.
What I have never wanted is to have my boss's job. I have reached that nebulous level of Sr. Developer/Tech Lead, and I don't want to be promoted any further. Sure, I'd have more power (who cares!) but I'd also have to go to meetings, make business level strategic decisions, do cost/benifit analysis and play politics with the other managers. Not that there is anything inherently wrong with any of these tasks, they just are not for me. I went to school to be a coder and I enjoy writing code.
My parents (and I think most people of their generation), have a very hard time understanding my lack of drive to "move up the corporate ladder". But the reality is, that I am doing the best job I can possbily imagine. A promotion would just have me managing people who are doing the job that I love. So as long as the cruch for coders continues, and the lack of H1Bs gets hung up in Congress, I can make a very comfortable ammount of money doing what I love. As the song says "...and who could ask for anything more?"
When I started writing code for a living i wanted nothing more than an office job. I basically wanted to be dilbert. I had to wear a tie, cut my hair, take out my earring and hide the tat's. I wrote COBOL for 3 years. My goal was to make as much money as I possibly. I worked all the time, weekends, nights, you name it. I lost touch with friends, I lost a girlfriend because of that. When my last contract was up a friend of mine offered me a job at his startup company. There I learned Java, JavaScript, VBScript, ASP, and HTML. At this company I don't have the stress I had before. No more impossible deadlines, no more 72 hour code marathons. Now my only goal is to have fun, relax, and enjoy life.
Where I work I mostly do simple shell scripts, perl, JavaScript and I'm trying to push some php in there.
The problem I've found is that I am always working on so many different and varied things that I never get the chance to focus on one language.
I guess my goal is to be a master of at least one language, to have a specialty and though I don't care about what others think I would like to eventually be confident in my own programming ability and to be able to write a program to do a specific task off the top of my head, just like writing an email to a friend.
Or as Einstein put it:
/S
"The more I learn the more I realize I don't know"
A good view on life and a good view on programming.
My goal in programming is to write the simplest code possible to a given problem. The code should be easily read and maintained.
Remember, there are no stupid questions. But there are a lot of inquisitive idiots.
I am an engineer, and as such, I use the computer and program to get a question answered. I've done a lot of research in fluid mechanics and turbulence, which is a nasty non-linear problem, and requires a lot of different analysis techniques to chip away at the problem.
The nice thing about a field like engineering is that computer questions like this are easily answered. I do whatever programming is needed to get the job done so I get paid and can eat.
Sheldon
I find that it's true for me. Whether I'm throwing together a quick-and-dirty shell-script or a more elaborate perl or C program, I code them because I want to get something done. It's just a bonus that I enjoy doing it.
It is very gratifying to see your shiny new program do something in a couple of seconds that would take you much longer to do by hand. Even more so because you understand what it is doing.
So you might say it comes down to personal satisfaction.
Roland
Never ascribe to malice that which is adequately explained by incompetence.
Ain't it the truth...damn recruiters do try to act like pimps sometimes...and they *never* want to do business by email; they always want to take up your valuable time on the phone...
"You done taken a wrong turn."
-Bill McKinney, in Deliverance
Yep...my life's goal is to write the kernel for Pimpbot 5000...I can just envision header files like smackaho.h, turnout.h, collectfrombitches.h, polishthecaddy.h, etc.
But seriously, I want to write software that, one day, will all meld into one big piece of code that will do anything...I'll put it in a file called whoisyourdaddy.h or whoisyourdaddy.java and import it into every subsequent piece of code I write. Sort of an API-as-omnipotent-deity pattern...
What is programming but overcoming boredom with brute force?
"You done taken a wrong turn."
-Bill McKinney, in Deliverance
i probably fall into the jack-of-all-trades, master of none category someone mentioned earlier. i know several languages at varying degrees of expertise: Java, Lisp, Prolog, Ada, C, SML, VHDL, Larch, VB...the list goes on. I've even done a little bit of work on designing my own. I would have to say my goal is not to learn one language well, but to code at least one good program. Up until now, most of my coding projects have been class assignments (usually in C), that get finished 15 minutes before they're due. Consequently, it's the most horrible, unreadable code imaginable. I want to write a well-thought out, well-designed program for once, instead of these embarrassing hacks that are my usual fare. I want to do quality work.
I am a man of const int sorrows
Try 10, maybe even 2.
Hell, a couple of things I wrote last month are getting kinda long in the tooth 8^)
Project Leaders - more akin to Klingons than pirates, as in "will enthusiastically backstab those around/above/below them in the quest for corporate prestige."
Operations Staff - compensate for their lack of status by shrouding their work in techno-babble, creating the impression that they do the work of 10 on a shoestring budget.
CIO/IT Director - tall guy with nice hair and a strong arsenal of acronyms with which to deflect any attempt to get a meaningful statement from him. About as bright as your average doorstop.
Stop by my site where I write about ERP systems & more
Picking one goal among the zillions of possible choices can be difficult - one that interests me at this particular time is applying technology in a work environment to maximize performance. Designing and implementing a distribution system that can peform at a world-class level for users who might not even have a high-school education is a challenge that goes way beyond byte-crunching. Hacking code is great, and of course can be highly rewarding in personal and professional terms, but actually applying technology to real-world problems can be even more worthwhile.
Stop by my site where I write about ERP systems & more
I'm current;y a Senior UNIX Systems Administrator for a Fortune 500 company outsourced to another Fortune 500.
;).
I started my path about 7 years ago with no clear direction but, somehow, that path was cleared.
My goal for about the last 5 years was to be a UNIX SA for a large company. This seemed to be a logical choice considering my interests.
I did this by eating, living, and breathing UNIX for the last 6 years. The more intimate I have gotten with the UNIX variants, the less I wanted to program (in college it seemed that programming was the path for me). I would set-up things just for the sake of doing it but, somehow, I always seemed to find a personal use for it!
Today, I am considerably younger than even the next ranking Sr. UNIX admin in age. However, no one there would argue with my abilities (only , perhaps, my spelling and grammar
My advice to you, enjoy what it is you do and you will find yourself living it. When you live it, you greatness will be found.
Good luck with your path, you will find a successful end.
The only question is *WHEN* you reach that goal, what's next. This is a position I find myself in today.
1. Always Talk like I know what I'm talking about Even If I don't.
1a. Even If I do know what im talking about everyonce in a while Intentionally leave out key pieces or contort things so that it seems Blatently wrong. To start Flame Wars.
2. If someone points out that I have no clue what iM talking about Insult them.
3. Make Sure People who take the time to reply with something that states that my comment was lame, realize how lame they are for wasting time
4. Never EVER EVER EVER use the words Natalie Portman.
5. Never EVER EVER State Jon Katz Sucks.. Even if he does. Negative Karma = bad. If you want to start a flame war and still not loose karma points see 1 and 1a
6. Always Abide By the golden rule. CmdrTaco Sux.
--------========+++Dont Feed The Lab Techs+++========--------
Well then. =b Seing as how ive been programming for only 6 years and came up with it independently. and have yet to see it elsewhere.
If it looks like a duck, walks like a duck, quacks like a duck.. tis a duck.
If i wasn't influenced by it, didn't know about it, and still came up with it. Then its original.
you're just bitter
--------========+++Dont Feed The Lab Techs+++========--------
Solve a problem you're having. As you do... you'll learn about the system. For each thing you learn... you discover many more things that you didn't know you don't know. Investigate those which interest you. Repeat.
Eventually, you'll find youself along a path that is only apparent in hindsight.
--
--
A PC without windows is like chocolate cake with no mustard.
Is my goal too ambitious or not realistic enough, or is it a good goal to strive for.
-- Any comments seen here are not mine, but a mixture of alchohol and lack of sleep.
I have been a system programmer for 15 years. I do it for the following reasons: - It is a job - It pays well - It is challenging I am not a guru and you will never hear me proclaim to be a guru. I think there are too many self-proclaimed gurus out there; we need less gurus and more quality producers. It is like a smart person calling himself smart; yeah, right... My goal is to finish this damn project I have been working on for a month. Jamey
Jamey Kirby
Being a very lazy person I don't ever want to have to work harder then I have to (when I'm not programming of course ;) ). So, my programming goals are to make every task in life automated and simple. Computers could save steps everywhere in human life, and I'd like to make that happen.
But..
I don't like the idea of programming that will take care of one problem and not help with the next at all. I like to think of things in a more abstract way so that you can solve a problem, and then use that code to solve 3/4 of the next problem.
I'm no guru though, I just make some money here and there with PHP and....well...ASP...*hides face*
"I told you a million times not to exaggerate!"
I haven't read all of the posts on here (because I'm a lazy ninja), but I feel compelled to stuff my opinion down everyone's throats.
I have always been of the opinion that programming is the newest form of sorcery around. With a computer, you can emulate states of mind, create personages and automatons, and change the very nature of reality. There is nothing quite as magical as a piece of code written by a caring and careful programmer.
Right now, I'm barely an apprentice. Hell, my web site is but a skeleton of what it could (at some point) be. I'm trying to learn Perl so that I can create things of value, maybe learn PHP and a half-a-dozen other things, but my main goal is to be able to make my visions come to life.
Any programming language, be it POV-Ray's scripting "language" to the highest orders of C++, can be a way to make magic happen. It's just a matter of knowing the proper chants and incantations to get there.
I just want to be a magician of the first order. I want to have a vision and be able to bring it to a loving existance with a minimum of headaches. There's where the magic lies.
AfroNinja
AfroNinja
Your goals as a programmer change as you learn new paradigms and as you master different languages. Depending on what you like programming it can be an end in and of itself. Their is so much to learn that you can make it your career pursuit. The bottom line is that no matter what career you choose the end game will always be changing -so look for something that has a valuable process and means *by your definition*. You don't have to know what you are going to do all of the time, but you do have to know what you like to do and what is meaningful for you. It boils down to what you value and why you want to be a programmer in the first place.
10 years ago I was part of a team that wrote some fairly complex VAX/VMS-based business systems. Then it was factory automation, process control and real-time data gathering. Then corporate intranet stuff. Then systems integration. All of this with a Bachelor of Arts degree in History.
My point is - develop a set of goals, but be prepared to allow them to change as technology changes.
--
I use C/C++ (sometimes Java), GTK+, amoung other goodies in Linux and I also write BeOS software.
Many people keep asking me if my commercial ones in progress are going to be open sourced. Give me good reasons to go open source with commercial software, no threats please :). I am a "small" time developer, so keep that in mind.
I enjoy coding, I learn a lot on my own and share sections of my code with others, just not the whole enchilada. :)
It's not that I have top secret code, but I like learning on my own. Sure, some of my code probably can/should be done better,all things can be improved. In some cases, like M$, it's not always the case.
-- to code or not to code
Just some thoughts...
I think that this is not a question of a programming language or tools like some people mention in the previous replies, but more the question of basic principles behind different areas of programming. I would say that these areas can be divided into five categories:
One obviously cannot grasp all at once and therefore you have to decide what you like. I know since my 15 that the first one (UI) is not my domain and either database aren't my something I'd like to stick my nose into so for me remain the last three what I'd say is wide enough range for single human. I think the question stands more like what of these you like and why?
If programs would be read like poetry, most programmers would be Vogons.
Very true! I wish more people would realize this. I think some people see C++ as they saw it back in the 1990's. I wouldn't be surprised if the next version had garbage collection.
I think my goal is to bring other valuable technology advances such as these to ppl everywhere for a $mall monthly fee. That and code my dream game and call everybody over to play in some tournament action while my wife sits back, looks pretty and presses her custom pizza/beer combo key at regular intervals. Hows that for a fscking goal?
-- Stupidity, like hydrogen, is one of the basic building blocks of the Universe.
I hate all sigs, even this one.
My own personal interest is in UI/CSCW stuff, but I also have a lot if other interests, such as programming languages, OS design and internet stuff like email and web technologies.
My goal, FWIW is to have a broad knowledge of many areas - enough to get by - but to be deep in one or two. I think that the more you know, the more you know what you don't know.
What I mean by that is that, OK I may be interested in OS design, but I know that I have neither the dedication or the particular set of skills to be an OS hacker. And I'm not afraid to admit it - that's probably the key thing for me.
I have one very simply stated goal:
It is not enough to simply get the job done.
I'm a legend in my own mind....
a. Work on cool stuff. OK sometimes you have to do other things to make raw cash, but so long as I get time to continue making software that does this then I'm doing ok
b. Control my Life. Programming and the internet allow me to live in the middle of the Scottish Highlands with my own company and talk to my clients
c. Don't necessarily want to be mega-rich, but enough for a decent house, good holidays, stuff for the kids, fun car will do fine. Programming is still lucrative, and seems to be getting more so.
As of now I think my goals have change a great deal in the past few years. Right now I think I like to do some work on back engines (the guts of the program) I don't care much for the UI of a program (yes I can do UIs, I like the FLTK toolkit for my UIs) also I think I like to go on with my education and maybe teach others to program (I just think that sounds like fun, I am a TA now and I like it)
My goals are pretty wide open. My biggest thing isn't to learn a particular area, or to become a guru on a very specific field - instead, my goal is to become a jack of all trades, which I pretty much am now.
For example, I study compression techniques, OS development (Alliance OS, for instance), language development (XBasic, GnomeBasic - yes, I'm STILL a fan of Basic :-), video game development (which is what I do on the side now Look for Boulder Panic! 2 soon! ), MMI development (Jaguar MMI is an Open Source MMI being developed by me), new realtime sound generation systems, etc., etc., etc.
The problem for me is really boredom factor - I really don't want to spend the rest of my life doing any one programming task. Instead, I'd much rather learn to be adaptable, and work on anything that catches my interests. Right now, it's primarily video game development (based on the older game development style, where gameplay was the most important, and flashy graphics were added after you knew the game was going to play great!), but in two years? Who knows.
Davis Ray Sickmon, Jr - looking for something to read? Check out my three free novels at MidnightRyder.org
You might want to check out the F451 review, oh and I think Microsoft is hiring.
Lars -
Calculus can be done with a calculator??
Even using Maple V, without any knowledge of calculus, you can't accomplish anything. There is more to calculus than single variable derivatives and integrals you know. (or do you?)
Lars -
I think there's a good bit of truth to this. About the time I entering my sophmore year in a CS degree program, I was starting to get cocky, and to think that there wasn't much in the programming world left that could surprise me. Then I took a course in functional programming (for context, let me mention that the languages I knew at the time were C, Pascal, and QuickBasic), which basically turned my head inside out, and made me realize how much there was that I was ignorant of.
On the other hand though, a lot of the stuff that self-taught people are likely to be unaware of just isn't used so much in the real world. It happens I'm actually using the skills I aquired in that functional programming course in my current job, but that's something of a fluke - most people will never find a real need to move out of the imperative paradigm.
You've got a good point here, but I suspect that many good writers are as interested in an excuse to play with language as in telling any particular story. And I'm guessing that most artists tend to enjoy the media in which they work at a very low, physical level, and actually draw inspiration from that enjoyment.
On more than one occasion, while noodling around with and learning a new tool, ostensibly 'for its own sake', I've found the stuff I was working on starting to take a useful form. I take it further in that direction, and end up with a polished, useful piece of software.
What's your motivation. If it's money, learn the basics and then go into management, you'll make twice the money without all the headaches. Works for me.
That's why I code. The mental challenge of creating a program which can do x, y, z just to see if it is possible. The best programs I have wrote are the smaller ones which just do one thing, like change the wallpaper every 5 mintues.
III.IIVIVIXIIVIVIIIVVIIIIXVIIIXIIIIIIIIVIIIIVVIII
To paraphrase Bukowski's comment on writing poetry,
you don't become a programmer because you want to.
You write code because you can't not write code.
Um maybe in ohio, but in my highschool at least 75 out of 350 kids who graduated took calculus if not more. That is a lower bound. That is in highschool also. In college, I would say at least 50% of the people need it as a prereq. Calculus is almost becomming common knowledge.
This has been expressed on Slashdot before, but it bears repeating.
The thing about coding that really floats my boat is breaking down a seemingly very complex problem into simple parts with simple solutions. Being able to come up with an elegant solution, not just some hack. There are two ways to code, if you're smart: so other people say "whoa, that's tough, you must be smart", or "hey, that's such a simple solution, you must be smart." =)
Another part of it relates to my math-geekiness - as I take more and more math courses in a variety of specialties (geometry, linear algebra, diffeq, etc) it's fascinating to see how interrelated this disciplines are - seeing simple solutions and relationships (and identities) behind a complex exterior... I'm really a geometric analysis geek, and near-everything can be broken down that way. =)
Ultimately, financial independence so I can do free projects/other, non-cs projects.
My end goal is to write programs using assembler. That, or machine code. The only real fields that still use this are (I think) embedded programming (cars, blenders, cell phones). Yeah, that'd be cool.
-------
Oh shit! I forgot to click "Post Anonymously"...
BTW, having had 12 people reporting to me in my previous job, I'm very glad to be back to zero. Money isn't everything...
I disagree, programming operation systems and compilers will always be for the "elite". But the goal of now-a-day programmers should be to develop tools making programming available to everyone.
Just like at the beginning of the century you had to be an expert to drive a car, now anyone can drive one. Of course you still need to be an expered to make or fix one.
I've come from non-geek background. It took me most of my twenties to work out that I get the most from work when I have to continuously learn (I get bored easily).
After a year, I thought I knew a lot. After 5 years of playing with various web languages/systems I've revised that a little ;-)
I'm in no place to suggest where you should be going - a lot of that depends on your personality, your aptitude and what is important in your life.
My goals are:
When you have learnt enough to realise how little you know, you're getting there (wherever that is :)
Don't learn answers, learn the right questions - the answers are easy to find when you know the right question.
.02
cLive ;-)
-- Trinity in high heels carrying a whip: The donimatrix - there is no spoonerism
I want to master the Art well enough that I never have to pour through documentation trying to grok some feature for more than five minutes. To have a thorough enough understanding of the tools, technology, libraries and structure that I can go directly from notion to design to implementation with little to no research necessary for underlying code structure and algorithms.
Agreed! It's art...I find myself thinking of it that way all the time. I don't know why...but I just see something beautiful (or maybe elegant?) about lines of code flowing across my screen in multicolored Emacs font-mode. Programmers are artists...many people including me have probably found themselves coding something utterly useless for no apparent reason...just because it's art!
We do it because we love it...I do it naturally; I do it randomly (on the blackboards, in my head, on a piece of paper) almost daily in that mindless institution known as school. There's nothing to think about, I'm bored, so I code.
I have a great background that says, "Codito, ergo sum. I code, therefore I am." I think this embodies what we do and the whole reason for things like GNU and the GPL in the first place. We don't do it because we're paid to do it, we do it because we love it. And then, when we're done, we share our creations with the world--we don't care whether we get paid, we just want to code.
What are my goals? I don't know...I just want to code. See you all later...I'm gonna go hack on Perl!
A manager was about to be fired, but a programmer who worked for him invented a new program that became popular and sold well. As a result, the manager retained his job.
The manager tried to give the programmer a bonus, but the programmer refused it, saying, "I wrote the program because I though it was an interesting concept, and thus I expect no reward."
The manager, upon hearing this, remarked, "This programmer, though he holds a position of small esteem, understands well the proper duty of an employee. Lets promote him to the exalted position of management consultant!"
But when told this, the programmer once more refused, saying, "I exist so that I can program. If I were promoted, I would do nothing but waste everyone's time. Can I go now? I have a program that I'm working on."
-- Geoffrey James, "The Tao of Programming"
'nuff said.
-- CondorDes
"I haven't lost my mind -- it's just backed up on tape somewhere."
10 years ago: Didn't know anything about anything related to programming. Had no real goals, except finding out why anyone would like to program.
8 - 9 years ago: Because I liked it. Nothing more, nothing less.
5 - 7 years ago: By this time the demoscene had caught my interest. These days it was to impress people, and push the limits.
4 - 1 year ago: Didn't program. The internet was growing, everyone was talking about computers and IT, and it sort of bored me into not caring much.
Now: For the fun of it. And to make money (it just too easy these days).
I'm pretty convinced not many people in here had a down period like the one I had, which lasted for a big part of my teens. Besides from that, however, it would not surprise me if a lot of people have a similar history.
And please don't moderate me to hell / flame me for this; I am actually on topic, although I'm speaking about myself.
"If you think education is expensive, try ignorance" - Derek Bok
My programming goals include creating a "real" virtual reality, I want to make "The Matrix", I want to write the code behind that graphics/physics engine.
Clear enough?
-------- "All I want in life's a little bit of love to take the pain away" --Spiritualized
I agree whole heartedly on the stability issue. I personally would like to work for a company that writes software that works first time, and then own a company that does the same, perhaps along the same lines as the Space Shuttle software team mentioned in a recent slashDot article. Am I mad?
If graphical programming languages are ever going to take off, they must be capable of non-trivial tasks. Using a GPL for something that JavaScript can do is easy and pointless ... using it to do something exceedingly non-trivial, such as write an OS, is much more interesting.
Email me, and I'll explain my dream in more detail.
--
It's a
-- Danny Vermin
Me too. Financial independence is my current aim, which I am trying to acheive in the games industry (plenty before me have succeeded!) But it's just a means to an end. Ultimately I want to play around with a graphical programming language I've invented, and write an operating system in it. A free operating system, naturally ;)
--
It's a
-- Danny Vermin
I'm so glad I moved to my current company (Naughty Dog, Inc. of Santa Monica, CA) It's pure console development (no DirectX headaches), we're not even using C/C++ (it's LISP ;), and the pay is about 3 times what I was getting in the UK. It's more like what I originally thought the games industry would be like. Everyone here is extremely clever; there's a great interaction of expertise across the board; it's generally funky.
I've thought about changing industries, but the games industry is finally starting to pay off, so it seems like the wrong time. Anyway, me & my fiancee are enjoying living in California for the time being ;)
When I return to the UK, I'll try to get contract work on the new consoles - esp. the PS2, since it's so darned difficult to code for. That should pay well, and give me time off. But if this title does as well as my company's past history says it should, I may be able to come back to the UK with financial independence tucked into my suitcase.
We'll see ...
--
It's a
-- Danny Vermin
That's my goal. When the future's done, I'll retire and do something else...maybe be a sysadmin for the past...
--Mythos
I'm sorry, I must disagree with you. My wife is a teacher -- she doesn't get a paid 2 month vacations, what she gets is a 90 hour workweek, of which she is paid for 10 months of the year, with a portion of that salary withheld so that she receives a paycheck during the summer months.
Some school districts allow the teachers the option of not withholding the money till summer, others don't -- but by no means is it a '2 month vacation'.
For most single teachers, it's more like a 2 month job hunt while they try to make ends meet till the next school year.
-- CyberTech
If CORBA really takes off then we are quite far down that road. I want to do CORBA. The more CORBA stuff I do the more impressive the standard looks. Yes it's big, overwhelming almost. But when you actually get multiple objects talking on a heterogeneous network it really is something special. Building a complex infrastructure that links various hardware/software platforms is a joy to develop in CORBA. I think everyone should learn about objects and components. It will definitely prevail as the programming paradigm in the next few years.
CORBA programming has its inherent complexity but its complexity comes from the inherent complexity of the problem it addresses. A lot of people claim that CORBA is 'too complex'. It's only too complex if your problem is trivial. Then you are probably using wrong tool for the job.
CORBA is far from dead and its future is actually quite exciting. OMG has made real progress in the last couple of years and approved stuff that we've been waiting for for a while. The standard has improved a lot and now it is feasible to use CORBA without using Orbix ;-):
- New object adapter (POA) is much more versatile and powerful than BOA. It's a pity though that so much stuff was written without using POA
- The interoperable naming service is a major step forward in terms of initial bootstrapping (goodbye stringified references)
- Objects by value and Any simplify sending arbitrary data via IIOP
- CORBA component model should fill the hole that KDE and GNOME guys discovered when they tried using CORBA as a component model. If this was completed several years ago, interoperability between GNOME and KDE wouldn't be an issue now.
My biggest gripe about CORBA is that it takes them so bleeping long to standardise anything (the components stuff should have been done years ago IMO). But it's better than nothing. It's certainly better than every vendor living in their own little world (examples anyone?). If you're into CORBA you should check out mico. It's GPL'd and has LOTS of features that even some commercial ORBs lack....is to make a 7 digit salary for doing what I would be doing anyway.
---
That and I have a twisted sense of humor and I love a good practical joke. Good programming skills can be used to entertain people who truly appreciate a good joke
"See, we plan ahead! That way, we never have to do anything now."
Most people would say that whatever a Doctor of Technology uses would be pretty good.
no sig
The real Steve Woston's site is here
no sig
I have a number of friends who feel this way, and I've never understood it. I've tried to make programming part of my reality. I've always felt like I've been behind everybody else. I see all these people who aren't much older than I, kernel hacking, and I want to understand what they understand (it doesn't help that I go to a techie-school). At this point, I'm still pretty overwhelmed looking at my kernel's source. When I pick up a language, I try to learn as much as I can about all the ins and outs. As a result I'm limited to Perl, C++, and Java, but reasonably proficiently in all of them.
When I get out of school, I'd like to get into game development. For this my views have changed drastically over the last few years. At the beginning, it was for the purpose of making interesting and realistic graphics. That's still there, but at this point I'm more interested in 3D engines. I'd like to work for a company like Bungie that tests the limits of a language.
In any case, as much as I enjoy it, programming has never been euphoric in the same way it is for you.
--The Mighty Willtor
"The knee is the elbow of the leg." -- My wife
To be able to code well enough to teach Joshua, that all important lesson of Futility. And to avoid that whole nuclear war thing.... Oh, and cause it can be fun....dunno why though...
--->----
I'm just sayin' is all
come for the naked robots, stay for the zombies
-
That was and still is (after 22 years) my goal.
I think I reached it and I'm VERY HAPPY.
You don't get the daily routine stuff assigned, you get the stuff that no-one else can do.
As such, you automatically learn more, since you always get the tasks no-one else can do.
Hence, you always are ahead of everybody else.
I saw a comment about money.
This here is more worth to me than money, more than anything else.
There are just two kinds of people:
Those who want to be loved - Those who want to be admired.
george./
Really, most of the things you are talking about have already been implemented, and quite extensively. I can see you may have a point about the extensiveness of their use, but still... We still write in C for the same reason that a lot of game programmers write in assembly, it's fast and very flexible. Garbage collection admitedly could be improved. There are many last-second native java compilers, but, as with the all of java, the purpose of the byte codes is to provide absolute system independence. Your "i is a power of 2" example sounds like constraingt programming. Really, it seems like our problems are mainly in backward compatibility.
- learn mathematics - shoot dope -
Oh man, you actually said "paradigm"! That's gonna cost you a spin, buddy!
Why is it that anyone who wishes to program anything still has to spend half of his time writing things like if ( retval == -1 ) { perror ("frobnicating"); exit (EXIT_FAILURE); }?
You don't need to write code like that any more. C++ supports exceptions, so do Java and Python and other languages.
Learning to use Python is well worth the time, and so is learning to use the STL and exceptions in C++.
right now im working on copyrighting helloworld.c.... anywho... Im planning on writing a tetris clone in gtk+ this summer, i'm currently in the planning stage. I'm thinking of starting AI which is partly due to reading Godel, Escher Bach. Ai a long way off for me though and i don't know where to start. I'm not really sure if i classify as a "proto-guru" but i know I fall short of guru.
"Imagination is more important than knowledge" -Einstein
How has the industry been unfriendly to you, as a female? Myself, i'm male, but i would say that the companies i have worked with have been (at least in the IT depts.) at *least* 40% female. Me, being a systems analyst, I find that most times women do a better job! There are more women in the CIS (Computer Information Systems) program at UofL than ever. I think it is close to being 50/50, in fact.
The money is nice, sure, but I really think of it as icing on the cake. I ENJOY what i do. I guess my goal, as a programmer/analyst is the same as anyone in any field. To take the time and experiences that i had early, and translate that into something fulfilling. Even if that means i'm doing pro-bono work for charity. I could really give a damn about the money, but if i'm enjoying what i'm doing (and eating, too...) and using my skills to create something, then i'm happy.
Ham on rye, hold the mayo please.
thelocust[dot]org
Perhaps i should have a little clearer.... i guess what i was trying to get across is that i think that i'm able to adapt to different environments, and I think that is what make a good programmer. The ability to THINK like a programmer, and convey those thoughts into code is what is important, the language is secondary.
Ham on rye, hold the mayo please.
thelocust[dot]org
> (libraries) that allow developers to deploy
> accross multiple platforms, with a
> re-compile or even less. We are getting
> closer, but we aren't as far as we COULD be.
Aren't you thinking of Java?
When I get in a programming mode
Compile and run
It is so much fun
"If I were to ask you a hypothetical question, what would you like it to be about?"
I love games, the first thing I did on a computer was play a game (Cliff Jumper for an old XT, using my TV as a monitor) and I've been hooked. Some people are content with programming databases and hacking kernels, but I want to draw upon the sheer power of real computing and produce games.
Throughout the history of the microprocessor, what has it been that is always at the leading edge of computing technology? I'd hate to see a spreadsheet program, a word processor, or even a presentation package that requires a P!!! 650 with 128 meg RAM and a 3D accelerator card. Games have been the driving force in new hardware developments, and new ways of doing old things. The code reusability in a game is almost nill. IMHO, to program games, you need to be the best of the best.
Linus Torvalds, Allan Cox, and any other kernel guru, are exceptional coders. I mean, they have written and rewritten the Linux kernel from the ground up a number of times, and I'm sure they could program some pretty interesting user interfaces, some rather twisted logic, and no doubt bury me and almost anyone else at raw coding talent. But the Linux Kernel will run on a 386 with 8 meg RAM. The real bleeding edge of technology lies in Quake 3, Unreal Tournament, Starfleet Armada, and the like. That's where I will be someday.
The chains are broken
Loki is free
Ragnarok is at hand...
My goals for the future, is to continue with the work I do at the moment - to have fun with coding. I currently develop on making the IRC protocol better - to improve old stuff. My goals are to make a firm which sells (bad word?) IRC-related software (open source), which is still availible open sourced on Internet. This may be the future of open source development, as projects often need foundation and funds to grow larger. Teamwork has grown my project (UnrealIRCd) larger, and we hope to get up and compete against commercial closed-source chat servers. Why so ambitious you ask? Because everyone should be able to have fun and be happy with the work they're doing. I do, and I hope to do so in the future. Maybe improve in UI and support arrays - but concentrate on the communications array - as this may be the way to communicate in the future. -Sts
-Stskeeps, http://unrealircd.com
NO.
Java was a good idea...poorly implemented as of yet.
C
- Sighuh?
That's why I started using Linux/Unix in the first place. Flash and style were not important, only a good, solid kernel and set of tools which were known to work so I could work.
--www.mp3.com/kruhft--
Well, you'd know never to compile that code 'cause main should return an int, its arguments are argc and argv, and the return value from system is not checked.
It`s actually very simple. (Like most good things)
The moment you notice something is wrong (like a driver or a program that has bugs or does stuff the wrong way) and the instant you actually think about fixing or improving the software, you`re learning, exploring paths to go in your mind, making a leap out of normal user-life.
Like someone said here somehwere: the path is your goal.
Maybe you eventually decide _not_ to run down the codemonkey trail, maybe you get stuck, but in the end the experience is allways learning you something. Rather than to complain on forums about non-working software, try to find solutions yourself, helping people debugging, working together.. The really important thing is to allways keep in mind that the time spent should in the end add to something. In the beginning of your newly started guru-life (hoho), that might be very dificult, and only your own hart can (and will) point you into a direction you will enjoy or find attractive. In the end, you`ll have tried a number of topics and things, and gathered a bunch of knowledge on related or unrelated projects and idea`s, and you can try and combine all you know to come up with something special.
It`s really exciting when that happens, but all in all it`s really just about taking a lot of small but interesting steps that will lead you into guru-life. The rest is passion, a clear and open mind, a good sense of humour, lots of hours before a screen and a few good friends you can talk to.
Btw, most guru`s will tell you they are no guru, only very skillfull
a0a - no guru
With great power comes great electricity bills.
I think this is more of a question of the evolution of development environments. The myriad languages, protocols, hardware, software libraries and modern multi-tier architectures we see today are simply a refactoring of how we get the job done, given the limits of our technology at the time. Typically software written is the solution to a particular problem. How the task is acheived is not important as long as it serves the requirements described by the problem. We are just solving problems... Therefore the strength of a programmer lies in how well an accurate solution can be procured (in terms of time, feature fulfillment, and stability of the program) The tools with which it is done, and the manner in which it is done evolves as does our technology. The languages, libraries/APIs we use today and in the future, how we use them, and how we adapt to them will shape us as programmers. They say we program computers, but it is computers that program us.
Although I'm just out of highschool and am going off to a community college in hopes of transferring somewhere else. I think the biggest problems are software that is not rubust. If you program can't handle a certain input, create a friendly message saying this doesn't work yet, not leave it wide open and undocumented.
I've had the pleasure of working with a company who supposedly knows how to code and has "nt" engineers. But I keep hitting problems because I go into sections of the program that aren't done, but there is no warning, and it breaks because they were sloppy.
PLEASE code well and make it worthwhile.
OR don't code at all. There are enough half ass jobs being done already.
--
MPCM
"Quis custodiet ipsos custodes?"
My real goals are much more simple and down to earth. I'm banging around a project in my head (still in the hope without wings stage) that I will probably work out a primitive, trial version over the summer, I want to do some OS hacking, maybe a little GUI work, just anything that suits my fancy. I try to keep an open mind about everything, but unfortunately, it means I could turn out to be a Computer Guy-Salesperson-Veterinarian-Poet-Author-Voiceover Guy-Screenplay writer-whatever else. I just plan on coding what I like, and what hasn't been done, and plan on having to throw all my knowledge away every ten years or so.
Just keep your heart in the right place, and don't feel all that bad when you find out that everything you've learned is worthless (they don't bother telling you it's worthless until after you've permanently rewired your brain to handle the new info).
Marxism is the opiate of dumbasses
Doubt anyone will read this but: I'm a nerd just like anyone on this site so I correct people when they make mistakes too. My wife makes fun of me and calls me a grognard (the meaning of which term she hasn't gotten quite right, BTW, but then there I go correcting her, right?) So, being that us nerds are smart, we nit-pick, annoy, and generally try to one-up each other by saying "You haven't gotten it quite right, now, it's ACTUALLY more like this..." In fact, the aforementioned wife has noted that the word "actually" has replaced the word "like" as the new throwaway word in conversation. Point? My point is that all the above people bickering about correct C grammar are probably right to some degree. There's a lot of truths, a lot of compilers, and what the standards bodies say isn't really what's important either -- what's important in real life is whether there's a user enjoying your program, or a user cursing at it because it crashes.
Don't post on slashdot. Get back to work.
When I start in programming, my uncle just got an XT and was taking a few programing classes in Turbo Pascal. He started showing what he could do and what the computer can do. Since I had not used a computer yet, I thought it was amazing. He showed me a bunch of games on the computer. Some of which basicly sucked. So, I figured that I would make my own. I think that was the driving force behind me getting into computers in general. Well, I never wrote a game, except for a few little BS things. When everyone was getting Pentiums and I still had a 486. I kind of gave up, until about 2 years ago. I was creating a website that was going to be used for my company. I just got into Linux a little while before this and I figured that I would try doing some stuff in Perl. Then ever since I am doing websites full time. I use PHP mainly these days. I have started learning C, but, I feel thats a little beyond what I need to know. As funny as it sounds, I can read C, but can't write it. I can go through a program and understand it fairly well. But, when it comes to writting it, well, thats another story. If anyone wants to get into programming, you NEED some sort of goal. What type of programming are you going to do, database, kernel, games, web, system utils, GUI frontends, GUI apps, etc... Find a program you would like to make, and go for it! Start writting things for yourself. Besides "hello world". If you a fairly decent at writting something, go out and start making small programs that you would find usefull for yourself. Do you play Quake with a dedicated server ? Write a program to create config files. Always start small, but, have a bigger goal. Its kind of like why do people go and becomes proctolodists. ( how ever you spell that ), do they say, I want to look at peoples assholes all day. No! They find something intresting about that subject. Find what you are intresting in. Not, what the rest of the world is working on. Becuase, in 5 years, the world will change greatly in computers.
until (succeed) try { again(); }
My goal is to implement a truly supermassively multiplayer on-line game engine. One that is persistent, perpetual, and can handle tens or even hundreds of thousands of players at the same time in the same world.
The world is changing everday. As a programmer, we have not learn if not invent, new ideas and concepts everyday. Or you will be discard just as a old pice of junk.
The next generation is getting smarter and more specialized. Internet has the resources that one ever need. A 15 years old kid can learn programming in 3 months just by using the resources available to him/her.
SO, my conclusion is:
In the programmer world
Only the strong will survive .
Hmm .. I program because it's fun. Been doing it for about 8 years now, and I've never really considered any long-term goals. Just to be good at it, and to have fun.
Please excuse my lack of english, I skipped english classes to hang out in the computer labs ;-)
Almost identical. Post-UK-Amiga-scene I really lost the fire; the community and "scene" aspect of it didn't seem to be present anywhere else, and the coldness of the PC scene and even the PC magazines at the time just put me off completely. Then, two years ago, I found Linux =)
create | destroy | enjoy
Unfortunately, if you really want one of those kinds of jobs, you're gonna have to go to where the job is. But - and this is a heavy but - if you're really good at writing drivers, daemons, and kernal hacks then setup a web page, put some of your work on it, and send emails to head hunters referencing your web page. Many geek-kind make a killing from their house in the Dakotas. If you have a good reputation, then the work will come to you.
"Stop whining!" - Arnold, as Mr. Kimble
- integrating with ridiculous legacy systems and protocols
- trying to figure out what exactly the customer wants when he doesn't even know himself
- hacking up a workaround for some bug in the latest OS/compiler/language du jour
You make many excellent points!
I have been coding for fun since I was 11, and didn't start getting paid for it until I was 21 (lazy, what can I say). But of all the jobs I've had in the EE/CS world, pure programming jobs are my least favorite.
In 6 years of professional coding I was never able start fresh with a plan or spec or at least definition before coding. It was always working on crusty old code that had been hacked on for years.
Personally, I would recommend that if you really like to code, don't do it for a living: find a job where you can use coding as a tool to other ends. A-la some sort of engineering... I chose computer architecture. I can use whatever OS I want, and engineer my own projects to get results. And no one knows that I spend 80% of my time writing my own code.
I think the biggest problem is that universities crank out programmers who really don't know how to program, or really want to. The result: tons of shitty code that really good programmers eventually have to fix. And as far as I can tell, only the most stalwart contractors really have the desire and brainpower to fix this stuff.
Anyway, code because you want to, not because you have to
---
https://www.accountkiller.com/removal-requested
Now, I code on the side, mostly for the fun of hacking, and work as an IT phb, I make a good living which supports my family well and most of all I hit that good balance where I get all the hacking time I could want, I live around technology and most important have that peace of mind and fufilling family time with my kids and my wife.
As a lot of folks said on this thread, It all depends on what makes you happy. Hope you find it and the serenety that comes from living your life as you want, regardless of what paths you take.
Don't just whine about poor internet privacy and freedom policies,
I'm an artist and a programmer. I have studied both disciplines in depth. It's a lot of extra work, but what that affords me is a great deal flexibility. I never have to depend on another programmer to build a tool for me. I never have to wait for another artist to get work done for me. I can write my own tools, shaders, exporters and importers. I'd never claim to be a programming guru, but I feel that for what I do (video games) I've found a nice mix. I think that combining my skills make me more valuable to a company and I have a higher level of satisfaction than before.
Please note those two posts were not made by the real Steven Woston. The above comments are not my own.
Steven
Steven Woston Lead Programmer J-J-J-Julius Games http://www.jjjjulius.com
My long term goal is art - software is art; good programmers are artists. I want to create representations for software in ways that exposes its beauty to non-geeks. Really. All art was quite useless until the arrival of the computer.
I found programming by accident after getting an ATA in Electronics. I figured if programming CPU chips was fun, maybe I should try computers?
I've been doing data processing related work for 10+ years. Writing programs in PL/I on IBM mainframes, tweaking, enhancing, writing from whole cloth. Now I'm finally in the development group and have a chance to program in something other than a dead language.
Although I sometimes envy the folks who can stay up all night for days on end and live in dark caves illuminated only by their monitors and lava lamps, I am not one. I like the outdoors too much, I like fresh air and skin that isn't pasty white.
My goals, reasons and motivations for programming:
* make enough money to live and help support my family
* stay excited about my job by taking on challenging assignments, learning new languages and approaches to software development
* Write code that is robust, good-looking and useful. I especially like making someone else's job easier or more productive. Most of my co-workers are people I've known for 10+ years, it's nice to make their day occasionally.
* Work for a company that doesn't harm the environment, promote cancer, create bombs, etc.
* Although I'll never be a brilliant programmer or a giant of the genre, I am able to harness flashes of insight and an ability to communicate with the folks who will use my programs. I usually don't program for myself so it's important that the people that I do program for get what they need.
* I want to enjoy my job for the most part. I don't want to have to drag myself into work every morning and spend the rest of the day figuring out how to cut out early.
* I want programming, with all it's sexiness and potential for sucking me totally under, to be a part of my life, a positive contributing part, but not the whole of it.
And for the most part I've gotten what I want. Not always, not everyday, but mostly. Now if I could only figure out a way to do this for a living but have the body I had while I worked in a warehouse, then I'd have something!
cKc
This sig is in the shop
Simply enough, it's to make a differance. Isn't that what we all want to do in some way or another? I mean, we've all used bad software, or sofware that could have been good if it just didn't have that one bug, right? Well, why can't I be someone who makes peoples days a little bit better by producing usefull, bugfree (or at least with no program-stopping, data-destroying ones) software? There is no reason. So that's what I'll do.
- To be excellent in some existing technologies. (eg. to be a guru in administrating Linux, to be a guru Java programmer.)
- To be innovative to create new technologies. (eg. to invent the quickSort algorithm, to invent the Web)
#2 does not always give you lucrative financial rewards.--
John
A GOAL would be a specific, obtainable target, or 'thing'. i.e. "I want to build a desktop environment for Linux that works".
... so, by doing all that, you will have achieved your Goal (Linux!) and purpose (to become a great programmer) at the same time...
...
A purpose is a reason for doing things, or an effect that is intended or desired. "Increasing my programming skills." is a purpose - its an effect that is intended or desired.
You've listed 6 (3/3) *purposes*, but no specific goal. What's the goal? You going to build something, or have a suite of apps under your belt, or start a new community-developed project? Set that GOAL, and orient your purposes around it.
My advice is to set a GOAL ("Build an application that allows Internet users everywhere to share files freely and relase that application to the 'net"), and orient your PURPOSES around accomplishing that GOAL ("Learn multicast programming techniques, encryption, participate in the FreeNet project, etc").
This might result in better progress, overall. It might seem obvious, but sometimes the most obvious things in life are the things most often ignored.
In the case of the original article poster, my advice would be to set a specific goal that interests you - some obtainable 'thing' or 'target', and then orient your purposes around it.
For example, you mentioned that you want to become a Systems Programmer. What are some of the products that a Systems Programmer produces - operating systems, device drivers, new techniques for memory organization, embedded systems, etc. (It's a big field, Systems Programming).
Saying that you "want to become the best Programmer you can be" is an admirable purpose, but it's a goal-less one. Instead, focus on what the actual "result" of that purpose is going to be - maybe you're interested in building a new operating system. That's your goal. It just so happens that in order to build a new operating system, you have to be a pretty shit-hot Systems Programmer
Just a little advice from someone who would prefer to remain Anonymous for this post, but who participates in Slashdot frequently
My main goal as a programmer is to get out of the computer field. Quite frankly, I've been disappointed in the industry. And I've been working in it for 8 years. I would recommend that you do a couple internships in the real world where you'd be working and make sure it's for you. I so wish I had done this when starting out. The best thing about the computer industry is that the pay is excellent, so far...but more and more companies (US) are hiring folks from India and other countries because they can pay them $25,000 a year to work. Also, I don't know what your gender is, but the computer industry has been extremely unfriendly to me (a female). If you're a guy, no need to worry about that. Anyway, just make sure it's what you want to be doing..because once you get your degree and have been out working for a while it's pretty tough to go back to school and to try to switch especially if you've got a family depending on you to bring home some cash.
Algorithms and theory are the basic building blocks to write better software. Programming by itself - experience and manual labour. One of my major problems now is time. It just often is not possible to work through a textbook and of course more often than not there is no-one around to ask.
A good algorithm can make an application twice as fast as a simple version. At the same time you might spend weeks optimizing it and gain short of nothing.
If you are somewhat brainy, then the day in day out stuff will not take that long and, as I said before, experience does matter, but it is something that takes time and cannot be learned.
What else to say - have fun and no long term goal. Try to be better than you are, never be satisfied as there always room left for improvement and do not make compromises. Your customers pay you 100% real money and so they deserve a 100% and rock solid solution. If they do not pay you because the software is free, then they trust you and deserve this trust to be honoured, full stop. I am not interested at all in whether you can achieve it or not, but if you are not willing to try - go away. If you are willing - there is nothing but a piece of code of which one can be proud of.
Last but not least - do not overdo it. 12 - 14 hours sessions are nice and make you feel a terrible nerd, but quality, and so satisfaction, is going to degrade in the end, say do not burn up yourself by trying to achieve all. You cannot; too many new and interesting things are coming up all the time and yes, I like this job 8)
I've learned while doing a variety of work that I love streamlining processes. Every time I make somebody's job a little easier, it's rewarding. My current goal is to simplify the jobs of our operations department as completely as is possible, by improving the software used to configure and monitor our network of servers.
Your goal is to become more proficient in your craft, and to make your work more effeciently accessible by people. You say that these are values, not goals, but that's semantics at best.
Goals are important, the problem is that some people have bugs in their goals. They define success as a static condition. As long as you realize that success, and the goals associated with it, are by neccessity dynamic, goals are incredibly useful, if only to help stay focused.
----------------------------
The more I think about this, the more I feel my really long-term goal (10 to 15 years) is to find something to apply my skills to, outside the realm of just plain computers.
..
It's easy to lose sight of this, but computers are tools to make it easier to do certain types of work. When you find yourself devoting all your time to improving the tools, and never actually using them except as a way to build better tools, something is out of wack. Especially when you consider that software is moving so fast that it's likely that your improvements will be inconsequential in a few years.
This is why I admire people who use computers -- and program -- as a tool to accomplish some larger goal, be it modeling supernovas or helping people in the third world. My goal is to find something that interests me enough so I can move on from improving my already excellent tools, to actually using them.
Unfortunatly, I haven't had much luck so far, but I'll keep looking
--
see shy jo
I wrote cute things in basic on an Apple //e because it was fun. My goal was to enjoy myself. Enjoyment led to games, and games led to machine language. An insurmountable obstacle for the limited resources available to me. I had the assembler, but no documentation. Stuck, dead in the water, for years.
I stopped programming for a while, then I moved on to a WinTel box and discovered Demos. I was awed. I wanted to do polygons. 3D was my goal. But, WTF is this? DOS/Windows doesn't come with any real development tools? I have to PAY for languages? Oh well, I got a job and went shopping for an assembler (because everyone knows all the coolest demos were written in assembly). The salespeople were stunned... "Assembly language? We don't stock that. Here, this box says it includes a mini-assembler"
I went home with Borland Turbo C++ 3 for DOS. I had to learn C just to create the framework for my assembly programs to run in. By the time I'd learned enough, I discovered that developing for DOS is a pain in the arse. I dunno... It just stopped being fun around the time I figured out that to get anything really cool on the screen required practically writing your own device drivers. Dead in the water again.
But with a kicker... Someone was willing to pay for my talent. I started writing windows software and was spoiled by frameworks. I lost my interest in writing "cool" stuff. My new goal was to write GOOD stuff.
At about the same time I got fed up with Windows, I rediscovered Linux. I'd given it a go once, but it didn't seem "ready for prime time". Now, it was almost ready and seemed worth the effort. It was a bit longer before I ventured to write any code on a linux machine.
As it stands, I do very little linux development and a lot of windows stuff. I'm heavily influenced by the "UNIX way", and I'm constantly agravated by the need to make Win32 calls to get any real work done.
I'm impressed with the quality of the libre compilers, but I'm a bit underwhelmed by nearly every other aspect of linux development. At least the documentation never lies to you on a unix system.
--Threed
The Slashdot Sig Virus was foiled before it could spread.
I'm what you could call a systems programmer, I write a lot of device drivers, write and/or graft IP stacks into embedded OS kernels, etc. Those applications (as opposed to system level stuff) I do write tend not to have GUI interfaces for human input, but rather process input from sensors that detect things like cars going through tollboths or move network packets around. There's never much other software betweem my code and the hardware, and I like it that way.
How did I get here? Two influences come immediately to mind: my first computer, a Commodore VIC-20, and my high school's VAX 11/750. The Commodore was limited, but you had complete control of the machine, and if you wanted it to do more than just make cute sounds and display characters on a coloured screen you had to learn everything about it. Today's more complicated and powerful machines give you a nice ready-made front end so that graphics and such are comparatively easy to do, and there is speed to spare so you don't have to be as careful with your code. On that simple machine, if you wanted something done you had to talk to the hardware.
The other big pre-university influence, the VAX, was enormously powerful compared to the PCs of the time, but couldn't do real graphics on the VT100 terminals students used. Flashy games and such weren't really the way to go, but I did want to explore what the system could do. So I got into playing with processes, IPC, learning assembler, etc. I also learned a lot about a very complex and powerful OS and how it worked. By the time I got to university, I found working "inside" systems was a lot more interesting -- and generally easier -- than developing user-oriented stuff.
That interest spurred me into getting a co-op job with a printer company, where I did real systems work on controller OSs (we called them "executives"). And that experience got me into a job doing different sorts of embedded and realtime work, but almost always at a systems level. I haven't always singlemindedly focused on this sort of thing, I did graphics and databases in school and some amount of GUI and RDBMS work professionally, but it was never as fun or satisfying for me as the systems stuff. With systems work, you still have that sense of really controlling the machine that you just can't get when you have to ask somebody else's OS or GUI API's do do work on your behalf.
And that's how it went.
It's worse than that: with full knowledge of the problems with gets(), Strousup gave us istream::operator(char *) with _exactly_ the same problem. Allowing a new generation of programmers to program their buffer overruns in an object oriented language.
To quote the standard:
/* ... */ }
/* ... */ }
[#1] The function called at program startup is named main.
The implementation declares no prototype for this function.
It shall be defined with a return type of int and with no
parameters:
int main(void) {
or with two parameters (referred to here as argc and argv,
though any names may be used, as they are local to the
function in which they are declared):
int main(int argc, char *argv[]) {
or equivalent;8) or in some other implementation-defined
manner.
That said, some compilers will allow main() to be defined to return void and still have a defined termination status (FWIW, gcc is *not* one of them. Declaring main() to return void will leave you with undefined behaviour under gcc).
The point is, declaring main() to return anything other than int on a hosted environment is not portable and, most importantly, not useful. If you disagree, I suggest you follow up at comp.lang.c and see what kind of reaction you get.
Everybody always asks me about my goals, future plans, all that stuff. To be honest, I don't have any.
Since about half way through college, this whole hacking/coding/systems thing has just been one fun game. I wrote code and learned what was in front of me, and it all was fun. I dropped out of school because the start-up let me play with computers more. There are hackers I work with who know more than me, so perhaps it's a goal to learn what they know, but I'm honestly just curious.
So here's my advice about having goals. Don't. Do what you love, what interests you. There's no need to plan ahead that much if you enjoy what you're doing now. Financially, of course, plan ahead, invest wisely, all that jazz. But as far as a career is concerned, forget planning. Things change so fast, just enjoy what you are doing. If you love to learn and discover things as much as I do, it all will follow.
Okay not mine - I actually like it for the challenge - but a lot of people's. A pretty interesting story nonetheless, so even if you hate my stylish implicit linkage check it out...
--
I think there is a world market for maybe five personal web logs.
Mastering programming is only the first goal. There are others that I've run into in my time as a professional coder.
Become a good public speaker. I've done 3 speeches for different conferences now (2 technical, 1 for a business audience). I'm constantly amazed by how much recognition and advancement you get. Plus, it's fun once you get passed the nervousness.
Become a good man-manager. Different companies have different names for it. I'm a "project lead" at my company. It is a good thing for yourself and your career to be able to manage people well. Management is about more than just setting scheduals and budgets. You need to be able to judge the amount of work someone is able to do, fix any interpersonal problems between team members, notice when a person is bored or overworked, advise your superiors on new programs/incentives, etc. The benefits are more pay, better control over your working environment, and (if you're good) a more pleasant time.
Prophecy. This is a tough one, but working on it helps. The better you are at predicting the future, the more fun and profitable your work as a coder is. If you can tell, for instance, that a new technology is going to take off, you can prepare for it and be ready. If you can tell what your company is going to do, you can be ready. Most often this means leaving a company before the going gets nasty, but often it means starting a new division before the competition (and thus, a better title and pay for you).
-Dave
Citizens Against Plate Tectonics
I am a mathematician. I use my machines as giant supercalculators. My goal is to be able to program my machines to analyze complex data. My tools of choice are C (GNU C) and Awk (GAWK - GNU Awk and MAWK - Mike's Awk), and they are simply the best. I'll never do GUIs except as a curiosity, will probably never do Python or Tcl/TK, will probably do Perl someday. (I've also done FORTRAN IV/77, COBOL, PL/I, BASIC, Visual C++.)
For me, programming is a means to an end. It allows me to express my ideas in ways otherwise unavailable to me. I am both developer and user.
Graham
Graham
Linux - Fast Pane Relief
Get a degree in computer science. While a degree does not a programmer make, it should certainly help give you the theoretical background you need to become a good programmer. Plus it will help you get a good job.
I'm not creative enough to be a UI hacker (though I've read the Human Interface Guidelines from Apple and used several different types of GUI/CLIs, and I have a built-in aesthetic of what seems "right" about an interface)
Sounds like you'd make an excellent UI hacker; that built-in aesthetic is essential for building good UIs. Creativity in UI design is not always a good thing. See the Interface Hall of Shame if you don't believe me.
29? You're way too young to be bitter and disenchanted. Don't let those hordes of 22-year-old millionaire dot-commies try to persuade you otherwise. I was once in very nearly your position, except that I did finish school (with a History degree, which is not much more useful than having not graduated). Did my time in tech support and took a bunch of classes, and was able to hang up my headset for good and go into development when I was, well, 29. Making that transition was greatly facilitated by finding a position that combined my support and development skills, supporting a commercial API library. This is more or less the standard route from support into development, at least in my experience.
And the advantage of getting older is that people pay less attention to the Education section of your resume (which belongs at the bottom, incidentally).
Administrative Assistant - a comatose, gun-chewing zombie
--
Peter
After that, my goal is to return to and spend seven years in a monestary in the outskirts of Kathmandu studying the Dharma, emulating the Bodhisattva, finally attaining a degree in Compa rative Religion from Harvard, followed by enlightenment, metaphysical realization and entering Nirvana to host a global video conferance with the late Alan Watts, the Dali Lhama and Timothy Leary.
try { do() || do_not(); } catch (JediException err) { yoda(err); }
My goal is to write a universal 'bullshit detector' that can apply the derivation rules of logic from 'Principia Mathematica' to first principles of metaphysics and the grand unification theorm, creating all basic sciences, nuclear-plasma physics, astrophysics, chemistry, biology, medicine and then finally the psychology of human sexual behavior. This ambitious project, on hold awaiting govt funding, entails a self maintaining massive database of 'truths' derived (under human direction as to 'revelancy' to human needs, sort of a trusted derivable encyclopedia) from said fundamental principles, with the cognative ability to catagorize any random statement into TRUE or FALSE in a reasonable amount of time by cross correlating it to the massive database as logically derivable from self evident axioms or not, complete with referances to prior research, bibliography and derivation path (for human checking of logic) - sort of like an automated library research assistant, or like a web search engine but only capable of producing 'true' information, while all unfounded, non-derivable speculative ideas and plain ol' B.S. are weeded out as 'false' or at lease 'not yet proven', particularly the system's self-referential 'Gödel' theorms.
I'd like to implement this with a massive cluster of superconducting R TX-2001's or better yet the PSC1000 using a FORTH microcode as the propositional logic processor but haven't decided on the high level language yet. Even that physical implementation probably needs updating.
try { do() || do_not(); } catch (JediException err) { yoda(err); }
What do you mean by program invariants and proofs? If you are talking about proofs of correctness, then Lisp should be right up your alley. It's relatively easy to write up a rigorous proof of an algorithm (e.g., quicksort), which is completely impossible in an imperative language like C.
Oh, and BTW, in Lisp you don't usually have to deal with the sort of C nonsense you pointed out before.
Which isn't to say C doesn't have a place---it most certainly does, in systems programming---but the fact remains that it's ridiculously hard and timeconsuming to do all the idiotic bookkeeping it requires for application programming.
Experiment, play, find out for yourself.
I've change my mind many times over the years. First I wanted to do games, but I found myself really enjoying learning the intricate details of how things worked inside. I taught myself all about the Atari internals, and was even going to get into the intracacies of some of the programmable signal generators and the tape drive before I discovered the ST.
The ST had languages like Pascal and C to learn, and by the time I had learned those, I had discovered Unix, and it's wealth of things, including sockets. That lead to distributed computing, then asynchronous I/O. In the meantime, I tought myself about X and C++, and wrote a thing C++ wrapper around XLib (that some idiot deleted a long time ago to save disk space on a gigantic writeable CD jukebox that wasn't anywhere _close_ to full). I then delved into middleware, and have learned some things about CORBA and Java. I've recently become interested in the Linux kernel...
Basically, anything that presented itself as an interesting problem is what I learned. That approach has served me well, and I have a fairly broad base of knowledge. There are useful things to learn at almost all levels.
I will say that experience has taught me that I'm generally not interested in the UI/Application level because what people wants changes so quickly and time-to-delivery is so short that I'm rarely allowed to excersize the attention to detail that I pride myself on in my other work.
Need a Python, C++, Unix, Linux develop
A Systems Programmer doesn't actually write much code. A Systems Programmer (at least in the mainframe field) is one who designs and maintains a mainframe system (excuse me, "enterprise computing" system). As a newbie in this field, I can tell you that the real motivation for me was not money (although it's nice to eat) but a desire to learn a system that not many others know. Yes, anyone can build a computer from parts, but how many can configure CHPID between some 30 pieces of hardware (and no S/390 Hardware Wizard exists!)
For me it's nice to get into a huge world that normally exists quietly in the background, running the essential computing services for huge companies.
Finkployd
I want to be good at solving problems. I want to be the guy that people call when all of their IT guys get stumped. I want to see a BIG RED speed dial button on the telephone of every manager with whom I work that says "KANO" on it.
I am not nearly that good yet, but I'm working on it. I want to be the guy who gets called to testify before congress when some IT related legislation is under consideration. "Yeah, Kano, this is Senator Lott again. We need your input on the new internet regulations package that we're working on. Oh by the way, my laptop is runnig great now, thanks."
That's my goal. I want to learn as much as I possibly can given my potential and need for a real life outside of work.
LK
"Hi. This is my friend, Jack Shit, and you don't know him." - Lord Kano
When I was a young(er) aspiring programmer, I wanted to know how to program the Roland MPU-401 MIDI interface, in intelligent mode. I wanted to do this in DOS, so of course I would be writing the driver for it myself.
This would have been impossible for me to accomplish if it had not been for a gentleman on Compuserve, who worked for a company called MusicQuest (that happened to make a compatible device).
He pointed me to where I could find a technical reference manual on the hardware, and answered the questions that I had. I was able to understand the technology in a little while and create a program that actually worked.
Moral of the story: My goal wouldn't have been achieved if someone didn't help me out.
So after you find out what your goal is, find someone who knows.
I mean, to save the world.
I did my transcription on a DOS machine running WordPerfect 4.1. My predecessor had defined some WordPerfect macros for commonly-used medical terms. After a while on the job, I wondered: "With so many medical terms being used here, what is the optimum set of macros to use for my job?"
And then I thought: "I have a computer. There must be a way to solve this problem with a computer program."
So I copied a week's worth of typing into one file, brought it down to BU (where I was going to graduate school), and after some hacking with C, emacs, and WordPerfect's macro language, I had a few hundred macros.
Now I'm working as a technical writer, and there are several repetitive tasks at my job that make me think: "There must be a way to solve these problems with computer programs ... in fact, there must be a way to write tools that will make many of these problems easier to deal with." Unfortunately, most of these problems take more than a few days of hacking to solve; fortunately, my manager says that after I deal with the projects currently on my plate, I'll have more time to focus on coding tools to help out our group.
So, in the short run, I want to identify the repetitive information-processing tasks in my life, and treat them as opportunities to capture the repetitive aspects in code, rather than endure them as part of life's drudgery. And to the extent that my employer permits, I want to share that code with other people.
In the long run, I want to help other people do the same thing with the repetitive tasks that dominate their lives, find out why so many people either ignore or misuse the programming tools that are already available to help them, and use that information to make better tools.
--
"But, Mulder, the new millennium doesn't begin until January 2001."
send all spam to theotherwhitemeat@ropine.com
Note that the "some other implementation defined manner" thing buys you nothing; there's no promise that such a manner remains defined, there's no implementations I know of that actually promise anything...
(And, of course, most of the people doing this are still using C89 compilers, and C89 didn't have the allowance for another format.)
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
Well, C99. C89 doesn't define the return status without an explicit return from main or call to exit(). (In fact, one of the arguments for fixing this was that the old wording was that the termination status was "undefined", but only behavior can be undefined, and the intent was clearly not that the behavior be undefined if you fell off the end...)
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
envp never got blessed. POSIX says
extern char **environ;
and says nothing about "envp".
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
"void main is perfectly valid", he says.
Oh, really?
Citation, please? And if you tell me it's from a Schildt book, I'm not even going to respond, I'm just going to laugh at you.
You've seen a quote from the standard in this thread. It's a FAQ for comp.lang.c.
Also, it is *NOT* an error to fall off the end of main after declaring it type int. That code is *REQUIRED* to compile correctly. A compiler may warn you (and indeed, should!) but *MUST* accept the trivial program:
int main(void) {}
In C89, that returns random nonsense; in C99, it's successful.
(Hint: Before you flame me, read my web page.)
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
Uhm. "int main".
Not "void main".
Thank you.
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
I mostly do tools that make my life (read "work") easier, and I also cheat at video games. That's how I got started, and it's still the most fun part of programming.
Hack for hacking's sake. You'll find a project you want to do that no one has thought of. Don't try to pick a field. Play in them all.
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
I wouldn't say you can *ignore* C89; you have to expect a lot of systems to be using it for a few years yet.
Anyway, the issue is, many systems already returned "success" automatically, and it's painfully easy for a compiler to do; gcc already had the code, and it basically makes up for one of the most common problems newbies ran into. It also encourages compilers to shut up about falling off the end of main, so people don't get the mistaken idea that main can return void in portable code.
(For the record, Schildt is an "observing" member, which means he pays dues and never shows up at meetings, and it's unclear that he "observes" very much.)
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
Osborne once offered me $200 to do a technical edit on the entire _C: The Complete Reference_. I told them it was way too much work for the entire book.
I have an 8-page fax from Schildt "defending" void main, based entirely on not reading the definition of "undefined behavior".
:)
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
This problem bothers me a lot since I like helping people (including myself) -- and most people I know can speak English at a sufficient level to state clearly what they want. All that is needed is somebody or someware (program) to understand them, and to help them.
So what I want to do is right a quick-and-dirty Natural Language parser.
gasp from the audience
I know the problem is considered to be impossible, or at least as difficult as creating an AI. Personally I believe that the two tasks complement each other, and when one will truly be solved -- so will the other. (Mostly because of the required 'learning' abilities the either program must have).
That's my life's goal (at the moment, and it has been so for the last 5-7 years at least!) I may even accomplish it one day, who knows?
--
--
Look, I know the road is rough, and the work is hard; But we'll burn every bridge as we get to it, OK?
I know others have said it, but here it is again: diversify. By that, I don't just mean you should go and learn a bunch of similar languages (*cough*C++*cough*Java*cough*Eiffel*cough*). I mean broaden your horizons. Take some time to study things - languages, paradigms, ideas, fields - completely unrelated to your current field.
As for languages - well, ESR says in his page that every good programmer should at least get acquainted with Lisp, Perl, Python and C. I don't disagree (except perhaps WRT C). (If you've been taught Lisp/Scheme improperly and, as a result, now hate it, give it another try, using a more free-form approach, and in a good environment - DrScheme is good, and, besides the regular Windoze, MacOS and Unix releases, there's even a distribution uses OSKit to make it an actual FreeBSD-compatible stand-alone OS!)
Other languages I suggest: Haskell and ML (both functional languages with more "traditional" syntaxes than Lisp; Haskell is a pure functional language), Prolog (another excellent idea with a terrible reputation due to being mis-taught), Smalltalk and Self (both pure object languages; Smalltalk is pretty much the father of modern OO, and Self is its prototype-based - i.e., classless - descendant), APL (yes, APL... it's very remarkable!), and various assembly languages, most notably for the PowerPC and the Alpha.
As for paradigms... well, don't get too attached to them. As you get some experience with various languages, you'll find that paradigms are only "right" as long as they're useful. More specifically, you'll have developed your own sense of the Right Thing in programming, your own view of what programming should be like, and you'll see how the good ideas in each paradigm fit into that. (For example, Brian "water" Rice is doing some very fine work on Slate, a language which, somewhat like BETA, integrates objects, components and functions on a fundamental level.)
Also, never neglect the fundamentals. I'm talking about the theoretical foundations of computational mathematics (*): partial recursive functions, Turing Machines, etc. (Remember - don't be afraid of the math... the math is your friend.)
Finally (and in relation to the former paragraph), sit down at whatever library you find which has a copy of it, and study Knuth's Art of Computer Programming. Despite some pitfalls, it remains one of the fundamental texts in the field.
One last thing: go look at the long-standing Tunes project (here's an explanation for the less enlightened, given that the project's leader has a tendency to verbosity and obscurity when writing). Also interesting is its Languages Review page.
(*) I refuse to use the term "computer science". But that's the subject of another rant entirely...
To the editors: your English is as bad as your Perl. Please go back to grade school.
Back in the early ninties (1992 or so) before my first programming job, I set as my professional goal: to become a C 'language lawyer'. (that is, the person in a programming team who understands the arcanum of a given programming language) Seven years later I am working at NASA with part of my job function being to provide C programming expertise to the other members of my team (I'm the only trained computer scientist on team, everyone else are physicists or methematicians). I have found that my goal was suprisingly easy to achieve and now need to formulate some kind of follow-up goal.
As a professional in any field, you should probably be reevaluating your goals on a periodic basis, as well as keeping an eye on how far you have progressed toward your current goal. You are likely to be working in your chosen field for far longer than it will take to achieve any specific goal, so you need to be thinking beyond the immediately upcoming goal.
The important thing is to continue to learn and find new things that provide motivation and interest. Open source is invaluable in providing choices, a community, and a great knowledge base from which to learn. Without it, I probably would have given up programming after 10 years. With passion, one can do almost anything.
Consider your motivations and look for the path that will make you happiest.
:)
If curiosity is your motivation, then the best path to take is that which affords you the most opportunities to learn. If money is your motivation, find the fad-of-the-week and latch onto it with a deathgrip. Wash, rinse, repeat next week.
Always reevaluate where you are and try to determine if you are happy, and whether your current path will lead to more, or less happiness.
-JF
MrJoy.com -- Because coding is FUN!
I think that it's important to start with the distinction between kinds of programming.
There's Systems programming. There's user-space programming ("applications"). There's tool programming. They all overlap in places, but they're different arts.
The more a programmer knows about the low level details, the closer they are to the metal, the better they'll be able to write good code. This philosophy pushes everyone towards writing assembler code. The more they know about systems programming, the better they'll be able to write good code. This philosophy drives people towards writing C code. But when you're building tools for others to implement user space programming, re-usability sometimes takes precedence over performance. Likewise, when writing applications, maintainability is key. This philosophy would drive people towards writing Java.
Only by satisfying some of each of the three constraints can one build a truly Krufty Hack.
The arrival at Elegance and Beauty (the "deep" goals of programming) is balancing these three disparate directions. The grail, of course, is highly-optimized, highly-flexible, extremely portable, outrageously maintainable, and Beautiful code that actually fulfills a needed function.
-
bukra fil mish mish
-
Monitor the Web, or Track your site!
Eloi, Eloi, lema sabachtani?
www.fogbound.net
above: 1337 5|^33K
elite speak - the obfuscated typed slang of script kiddies
title: ur n0t 1337
You're not elite (1337 speak for talented, knowledgable, skillful, or just good in general).
1v 0n133 hAx0rd f0r a m0n74, & 1 Kn0 3vr1t41ng a1r3d1
I've only hackered [been a script kiddie] for a month, and I know everything already.
1v g0t a11 t43 1337 5kr1p75 & r00t 0|\| 1075 0\/ 80X35 & z11110n g1gz 0v Pr0N
I've got all the elite scripts, root on lots of boxes, and [a] zillion gigs [gigabytes] of porn.
g355 175 d1fr1n7 f0r 1337 d00dz 11K3 |\/|3 !!!!
[I] guess it's different for elite dudes like me!
Yes, there are really people who talk and think that way. Think of a 13-year old kid who has just learned the bare rudiments of programming and goes around seeing how well he can defy authority figures by committing random acts of vandalism and getting unpaid access to things that he isn't supposed to be able to get, and the online peer group he fits into with it's own customs and slang. They're not generally bad people, or stupid, just young and ignorant and trying to have fun.
Semantics is about the meaning of words. A semantic difference is a difference in expressed meaning, not a superficial difference in expression of a meaning.
By definition, a goal is something that you hope to achieve, not something inherently open-ended and unachievable. To use "goal" as you would "value" is an assault on precise communication in the English language, an effort to make synonyms of two words with distinct meanings in a language already overflowing with useless synonyms.
You might as well say, "I have a turnip! A turnip that all men will be judged by the potato of their character, not the carrot of their skin." After all, it's only a semantic error, people still "get what you're saying."
Join me, my fastidious brethren! Save the words! Take the Oath (post it as a reply):
Oath of the Guardians of the English Language (A.K.A. pedant's oath)
I, (name here), solemnly swear
to protect the English language
from ignoramuses and morons alike;
to correct improper utterances,
and poorly written sentences
(even if it annoys people);
and to kill, without hesitation,
anyone who uses "literally"
to emphasize a metaphor.
Yes, I do mean proofs of correctness. But it should be understood that because of the Curry-Howard isomorphism (in short: "programs=proofs", but that's a bit short; I used to have a page on Curry-Howard but it's gone; promise, some day I'll rewrite it, but for the moment that's quite low down on my TODO-list), typing is merely a form of proofs of correctness, but proofs that are checked by the compiler itself. What I want is the ability for the programmer to specify completely general invariance properties on her program (e.g., "all through execution, i will always be a power of two") and to prove it (naturally it is the programmer's task to prove things, otherwise the compiler's job is far too complex), and the compiler will (a)check the proof and (b)possibly optimize using the extra information thus obtained.
Other than that, I agree that Lisp is one of the very best programming languages in existence. Unfortunately, Scheme (which is the best as far as the core language is concerned, IMHO) is utterly worthless as far as the library is concerened; and Common Lisp (which has a very rich library) isn't nearly as elegant as a Lisp language could be.
What I want is the ability for the programmer to specify completely general invariance properties on her program (e.g., "all through execution, i will always be a power of two")
This specific case is fairly trivial to do in C++. Just define a class with assignment operators that enforce the invariance. You could even make a template class to cover a whole collection of variations. If you were willing to take the memory overhead you could even make a generic class that holds a pointer to an invariant-check function.
Also, try looking at Eiffel, it has at least some invarient enforcement capacity, though I am not sure if it has exactly what you are looking for.
The subject says it all.
If I can help people who use my code out and have a fun time creating it, I'm happy.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
Though it's scary at times, I'm still a firm believer in the fact that the single most important goal that the human race should be working towards is the invention and cultivation of AI. I could get into the scarier details, the science fiction of AI; couple AI with robotics and have some 'sentient cyborgs' who aren't happy with their creators, but that is only one outcome. The outcome I foresee is a reliance and interdependence.. A joining of man and machine over time.
The first primary goal of an AI should be that of learning. Learning about it's environment, about the entities that have provided for it, etc. The second goal should be interaction, the 3rd understanding, the 4th complete thought & problem solving, and the 5th, sentience.
There is a lot to think about when thinking about AI. What will happen to humans? What will happen to machines? Does this ultimately mean the end of humanity, or human vs robot wars we have so much popular fiction about? Possibly. But this is how evolution works, and besides, aren't you tired of the lemony-fresh life we have now? What ever happened to just surviving? I don't feel like I have a huge purpose aside from making money, but I think with the advent of computing I now have the tools available to me to make a true change in the course of human history.
cd
1. ENGINEERING IS A SOCIAL SCIENCE.
Yep, that's right--it's not a hard science like mathematics or physics except in the most facile and shallow way. Every engineer should have a background in human factors as well as scientific ones. Our creations are ultimately used by human beings, and we cannot afford to neglect them.
2. ENGINEERING IS AN ART FORM.
Engineering is not simply "creating stuff that works". While possible, it hardly contributes to the human race as much as aesthetic qualities like grace and elegance do. Compare an I.M. Pei or Frank Lloyd Wright building with a Soviet-era fish cannery--which one do you think adds more to the world's culture, designwise?
3. SOFTWARE ENGINEERING IS A HIDEOUSLY BROKEN FIELD.
The axiom is that "if carpenters built homes like we build software, the first woodpecker would destroy civilization". No other form of engineering permits the kind of widespread failures and bass-ackwardness which we do. Most Professional Engineers I know (the people who get to add "P.E." after their name) can't stand the thought of programming being elevated to the level of an engineering discipline, because they see us--correctly, for the most part--as Johnny-come-latelies who are concerned only with making a buck and looking cool, not building things which will stand the test of time.
4. MY GOALS
My goals are formed by these principles. Number one, my ultimate and overarching ambition is to make software which is helpful to society and individuals. Second only to that, my goal is to make elegance an integral part of my work. Third, I aim to write software which doesn't suck.
As long as my job permits me to do all those three things, I'm happy. If I write a piece of software which manages to achieve all those things, I'm happy. Right now I'm polishing up Fishtank-1.0.1 for release (a GPLed, elegant, well-documented crypto library; email me if you want to see a pre-release) and I think it's been guided by those principles. I'm happy with it, and that leads to my final, most important, goal:
5. BE HAPPY.
:)
For me I enjoy making somthing from nothing. Programming is a lot like woodcarving in that you start with an idea and see where it takes you. Sys Admin in_and_of_itself can be pretty tedius, especially if you work in an environment where change is a bad_thing. I love trying the newest, best tools and applications available. I love hacking apps. Get everthing running, sit back and monitor, spend free time hacking. With each application that I write I learn a little more and learn how to creatively solve programming problems. Time for Zen moment: In a nutshell,The path is the goal.
I found that, as your standard of living increases, your desired standard of living increases along with it. Soon, you need ever more money before you drop out of the corporate world and thus never do.
:-)
In my experience there comes a point when you are happy. Or at least, for me, I'm happy now. I figure it shouldn't take that much more for me to be able to "retire" to the life of writing free software.
Of course I was born to parents who started off dirt poor--and whose attitude, now that they have money, is that "the bigger your house, the more junk you have to dust." Same with cars: there does come a point where the stress of worrying if someone will side-swipe your car outweighs your enjoyment of having a nice car.
So I figure the point where I should be able to cover my expenses for the rest of my life is comming up relatively quick. But of course there is that AS-400 running Linux that I wouldn't mind buying...
With the standard template library and mechanisms for generic programming, C++ is a high level language. Go read some Stroustrup (3rd edition, the language has changed a lot!) some time. Larry Wall once said that the usefulness of a programming language is inversely related to the number of axes the creators of the language have to grind.
My goal is to die having made an even number of sign errors.
-Tom Duff
I like Perl programming in general, although I am relatively new to it. Web programming is a nice easy thing to do, and you can get great results with very little effort and a good graphics program. I used to like GUI programming, and I might still get back into it, but Java Swing really irked me with the layout stuff.
I dislike C, not that I can't program it, but because it just pisses me off. Starting from scratch in C is okay, but as soon as I hit somebody elses code I scream. Maybe it is because I like my code to be easy to follow rather than optimal...?
The main focus of the 'industry' (nearly every industry) is to take current technologies, and make them work together to augment human decisions and work. I know it sounds like a buzz-sentence (and it is a sentence, a life sentence!) but the fact remains: every business problem can be solved by one proprietary/expensive solution, or by the merger of 2-5 seperate less expensive solutions.
The real programmer isn't necessarily knowledgeable in all these technologies, but is good at
Problem solving
Learning (quickly)
Grasping large-system concepts quickly
Discussing the solution with others at their level
Once you have the basic concepts of programming down, the speed with which you implement the system is often more important that the speed the final system runs at. You may find yourself writing a VB client which interfaces with a Perl cgi module which then communicates with an ecommerce DB. The next day you have to talk with the marketing manager about the best way to keep in touch with sales reps on the internet. After that its off to manufacturing where they need to change their maintenance and reports DB interface.
You have to know of new technologies so that when you have a problem to solve you know about the tools that are available. A guru C programmer knows of a few other languages and can apply them, but every problem looks like a nail to be fixed with their C hammer. This isn't bad, but in most cases a person who goes to the hardware store every week and peruses the tools available without expending a lot of time in any particular tool will do better and end up with a more easily maintained finished product.
-Adam
Education is what you get from reading the fine print.
Experience is what you get from not reading it.
You're being C-centric for no apparent reason.....
First, make it work, then make it right, then make it fast, then, make it bloated!
I want to write lots and lots.
I want to convince people that English is the best language to write in.
I want to get so intricately involved in grammar and spelling that I never have to really write anything.
I want to learn everything I can about writing so I can, you know, just write stuff. Anything. It doesn't matter what it is.
I want to have grammar that's so perfect that no one can find any mistakes in what I write.
What strange to me is how programming is looked at as an end in itself and not a medium for creation. I would have expected raves about implementing great ideas. Huh.
Hmmmm, let's see....well, I'm not bright enough to be a mathematical hacker, I'm not creative enough to be a UI hacker (though I've read the Human Interface Guidelines from Apple and used several different types of GUI/CLIs, and I have a built-in aesthetic of what seems "right" about an interface), and I'm not knowledgeable enough to be a device driver/kernel hacker. Plus I don't want to spend the next 10 years writing plug-in code for the Office Assistants.....yeech.
What I'd ideally like to do, once I get some serious skills built up, is be one of those guys who goes around cleaning up old crufty bits of code, rewriting things to make them smoother/faster/less cluttered, updating bits of code that haven't been touched since the original developer lost interest six months ago, that sort of thing. Is there a category/place for people like that? (Other than "pathetic", that is.)
ObBitterAdvice/FeelSorryForSelfRant: Kids! Thinking about leaving school to get experience in the "real world"? For chrissakes, DON'T! You'll end up trapped in a dismal malaise of low-paying, unthinking jobs with no hope of advancement because you don't have the sheepskin, you'll be shunted away from jobs that might build your skill set and enrich your coding abilities, you'll watch your peak coding years drain away while you struggle to balance work, more work, and the one or two classes you can afford to take a semester (which means you'll have your degree roughly the same time your Social Security runs out) and your brain will rot from disuse into a pasty mush that actually wonders why anybody would use a mail program other than Microsoft Outlook. Save yourselves! Don't end up a bitter, disenchanted tech-support worker at 29! (Er, like this guy I know.)
I use Macs for work, Linux for education, and Windows for cardplaying.
I ended up as systems programmer by accident. I drifted into the field when it was noticed I knew more about what held the systems together than anyone else in the company. A lot of systems programming these days seems to be making jobs easier for non-tech staff. I write a lot of user interface stuff that shows the staff in charge of changing backup tapes exactly when theres an error and what to do about it. I write utilites that automatically let me know when the system is having a problem that needs my attention. The greatest goal I have as a systems programmer is to have a long stretch where I can sit back and do not very much at all apart from keep up to date on new technology.
Then the community as a whole shouldn't be bragging about how superior their software is to commercial, closed source software unless the piece of software in question ACTUALLY is.
The open source ideology might be far superior, but that means bugger all if the code doesn't work.
Kintanon
Check out JoshJitsu.info for Brazilian Ji
This is in Wichita, KS. If you are interested, reply and I'll tell you how to contact our HR dept.
www.eFax.com are spammers
"The difference between Theory and Practice, is greater in practice than it is in theory"
seriously though, if you want to get into OS development, take the hard, low-level bit-basher courses, the parallel and distributed systems courses and LOTS of theory and algorithms electives.
there are a lot of options out there besides M$, IBM, and RH. remember, 95% of all computers are embedded, and about half of those require an OS of some sort. in the embedded market, no single company owns more than about 5% (vxworks is about the biggest).
there are lots of companies that have their own OS ( including the company I work for ), and they all need talented engineers ( ditto ) (send me your resume)
The difference between Theory and Practice is greater in Practice than in Theory.
I would LOVE to do kernel hacking or deamon writing or device driver writing for a living (not just on the side) but WHERE ARE THOSE JOBS? I can't find any in a city I want to live in. I DON"T want to live on the east coast, west coast, or in Chicago. Everywhere else, all the development going on is just business app and science app writing. I'd love to do more low level coding, but nobody I can find around here is DOING that. *sigh* If any of you had any ideas.. let me know.
"Anyone who can't laugh at himself is not taking life seriously enough." - Larry Wall
Actually, your mainframe comment was spot on - I have just clocked up one year at my first job out of university, which is working on mainframe system software. There _is_ a lot of money to be made, yet I'm starting a new job in three weeks.
;)
Why? For (some) of the reasons mentioned above: the mainframe area _is_ on the decline, though it will take a long time to disappear, and as this is my first job I don't want to be "trapped" into one over-specific category. I have learnt an absolute truckload about being a coder, and about work in general, but I feel like I have learnt a large slice of any "general" knowledge I can gain from here.
And after learning all that, I decided I wanted something else. For now.
Hope it turns out I guess
Cheers,
SuperG
P.S. MVS (OS/390) yeah done that. Have you heard of VSE/ESA though? FEAR
Maybe I read too much science fiction, but in as few words as possible, I want to help write cyberspace.
You know, that place where you can actually buy stuff online, with ecash, and cryptographically backed up anonymity (or pseudonymity). And let's not forget AI. I really want to build an AI.
I'm not interested in "software that is interesting". I'm interested in "software that makes the world interesting." Zero Knowledge is opening an office in San Jose, and might be starting to hier junior people about the time I graduate. That would be a cool place to work. Or anyone working on intelligent agents or reputation managers (moderate the entire web).
Sure, most of this is pointless. It's just toys for their own sake. But Snow Crash wouldn't have sold so many copies if the Metaverse wasn't more interesting than the real world.
--Kevin
A computer is a really, really dumb, but useful, robot. The term 'computer' originally meant humans who would add up column A to column B, then put the result in column C. Then people made machines that could do this in a fraction of the time, make fewer mistakes, and complained less.
My computer is just a tool for getting stuff done, and programming is just telling the computer what to do. I generally keep programming in two categories: useful applications (like defining a list of words for weekly vocab quizzes) and fun stuff (like a random-pattern generator).
All in all, I think an important focus of programmers is to make programs that make life EASIER, not harder. A computer shouldn't be tough to use. People should just learn some basics of programming, and be able to tell comptuers how to get boring stuff done, so the humans can do fun stuff.
Like play Quake.
Or did I just contradict myself?
------------
"Okay, who taught the cat how to type ctrl alt delete?"
But after time, the fires dwindled down again, as I had neither the time nor energy to fullfill them. Since then, I've almost exclusively worked in Unix, writing tiny programs in shell, C, and later perl. The ambitious programming dream is still there, to write the ultimate, self-learning chess program, and a self-learning AI with audiovisual (and perhaps automotive) peripherals, HAL 9000 (or less), if you like. My main goals are now to keep the customers and, thereby, my bosses pleased, and since I changed jobs in 1997, with a five month hiatus, my fire has returned for about a year, after which the stress of too much work for too few people doused the spirit once more. Still, recently I heard, my name is sung with high praise with at least our biggest customer, so in that year I did some things regarded as quite amazingly spiffy. ;-) From some little programs I wrote in my spare time I have also learned, that I don't have the attention span and stamina to write the really big programs, like the ones I dream of. I wrote a score keeping aid for watching snooker, since I hated it not knowing when one or the other started needing snookers, and the commentators weren't all that helpful all of the time, and I play snooker myself seldom enough not to have the program in my head. Anyone wants to look at it, mail me. It works, but it could use some refinement, some added checks to prevent mistakes (or "cheating").
So, after 13 years, since I'm now in a bit of a dip (again),
- my main goals are:
- Getting up in the morning, on time.
- Trying to keep computers, customers and bosses as happy as an be.
- Trying to do as much work, whithout getting a feeling of being overburdened.
- Relaxing as much as possible in the evening.
- Trying to find as much fun during all the bove.
- Read up on
/. to keep up to date (this used to be the function of Usenet.)
Oh well, 'nuff said.Stefan.
Usenet used to be a treasurebox of information, until the masses were let loose on it and drowned the useful content with cries of "It doesn't work! Help me! Now!!!" and "You suck. <RANT MODE=agressive; SPELLING=uneducated>
The truth shall make you fret. (Ankh-Morpork tImes motto)
The practical reasons can be summarized in two words. I'm lazy. I know from personal experience that some extremely repetitive, tedious jobs can be automated, to the point where it takes 1/2 an hour to do what took the previous employee 8 hours to do. This obviously makes the work easier, less boring, less time-consuming, and somewhat more lucrative.
The drawbacks to this are that the institution whose workflow you streamlined starts to expect you to do even more work, as the norm, and they expect you to train others to streamline their workflow, etc. It sort of sucks, because they hardly ever compensate you fairly for increasing a department's efficiency by, say, 400%.
The other side of programming, in my experience, are the true artists and mages of the computer world; the people who have such an intimate knowledge of an architecture that they can find entirely new forms and mediums within them.
Steve Wozniak, who orchestrated the construction and customized the design of stock components into fully functional Personal Computers, comes to mind. The artistry and complexity of a design like the Apple computer is no small feat.
The programmers of Adventure!, the first text-based game and precursor to every MUD ever created, took a complex, "serious" tool, and made it into a world that drew people inside. Infocom, with Zork, continued this trend by bringing those types of programs to the masses. What better way to get someone involved in technology, than to introduce them to entirely new worlds to explore?
When the two sides of programming meet, though; this is where the true miracles occur. The practical side of email, which many people don't understand the complexity of well enough to appreciate the programming side, is all fine and good for business purposes.
However, the true miracle is that email has become easy enough (remember Pine?) and ubiquitous enough that we can use it to communicate across borders, with familiy and friends that would be lost, or forgotten, otherwise.
Really, the programmers that I respect the most walked the line between the practical, functionality-oriented world, and the mystical, immersive, transcendant world, and created systems and programs that either side could see the value of. That's my goal.
Free music from Jack Merlot.
Is to make yourself obsolete.
Computers are far better then people at repetitive tasks and similarly repeition is the least valuable use of the unqiuely human ability to reason.
My entire career has consisted, to one degree or another, of taming computer systems such that neither others nor myself would have to work at that level again.
Anything you find yourself doing twice, you should be teaching the machine to do for you.
The wonderful thing about this endevour is that, for every job you eliminate, you open up three new even more exciting ones that build on what you have already done! Its all about eliminating drudgery and expanding possability!
I want to write a program that makes programming
as currently understood obsolete
Don't ask *giggle*
Basically, I'm trying to build a new way
to talk to computers - cobbled up from old code
ideas floating around for years.
So that pretty much directs most of my research
Dunno if it'll work. Dunno if I'll be finished
within 5 years. Been working on it for 10 so far
But I'm not in any hurry and don't think it's impossible
My goals are decidedly simple as relax with my sweetie and her brats in a cottage on long beach...
[song]
// I want to troll with the very best
// like Signal 11 and OOG caveman...
// I'll eat grits till my throat swells up
// Like no-one's ever does
// TROLLEMON! Gotta first-post them alll....
// Natalie, you're my best friend
// In a world that has no MEEEPT?!%@
// BEOWULF!
// open sores! ~~#!!#!~#!##!##!!~#~!#
[/song]
-troll taker
Good Engineering is hidden, and looks deceptively like common sense.
Programming is engineering, many people think it is just learning a language.
The different paradigms are like different building techniques, poured reenforced concrete, ballon frame, earthen ware, geodesic domes.
Experience, lots of experience, training lots of training (formal or on the Job), allows you the insights on what to use and when.
Recognizing the degrees of freedom, sometimes these are changing the perceptions of the people with the problem rather than the specifications you are given.
Make tools to solve problems, using personal craft
Have a problem to solve, work to solve it, get someone to pay you for it.
Smile a lot and be invested in your users problem. Your their solultion, you are helping them and they will appreciate it.
Intense focus on the problem, but from a little distance so you dont miss the obvious.
After 28 years I am still learning, applying and smiling (they still pay me, go figure)
return(value);
has many uses. first off, you can use a return value to tell you where your program died. If you're wanting to "debug" the binary so to speak. Secondly, it's used to explicitly return control to the calling function (in this case return control to the OS/Shell). It's just sort of a "best practice" - Like using the close() function in PERL, even though PERL closes files upon finishing. however, in this case, the dostuff() function more than likely incorporates all of that itself.
FluX
After 16 years, MTV has finally completed its deevolution into the shiny things network
"It is seldom that liberty of any kind is lost all at once." -David Hume
Do it the Unix way, do one thing and do it well. If you want to be a kernel hacker, become the best kernel hackers (atleast that is what the ulimate goal should be), if you want to be a encryption expert, be the best encryption expert, if you want to be a guy that pours hot grits in his pants, make sure there is more grits than anyone else and make sure they are 10 times as hot as any other grits on the planet.
I am not saying to isolated you self on one topic, but focus on one topic even when you are playing with another. It is good to have a broad understand and experince with a lot of differant aspects of computer science, but always keep focus and dedicated to atleast your favorite topic and if you have to play or slack off, do it on one of the lesser subjects.
When people say 'LINUZ' most people think 'KERNEL HACKER EXTREME' when people say '[insert your name here]' what do you want people to think first '[insert favorite type of hacking here]'
Find what you want to do, do that, focus on that, eat sleep and breath on that, play, slack, tweak on everything else, but keep focused on your main goal, don't slip, and if you do slip get the hell back up fast.
If you are just starting though, it is a differant story. If you are starting, spread way the hell out, try everything at first and see what 1) you really enjoy 2) what you really take to.
Every try graphics programming or Javascript, tried BASIC yet or VMS, pick up a x86 ASM book and a NetBSD CD, every looked at Windows98 or DirectX programming? Try some Visual C++ and then some gcc, GTK/QT/Motif/Leffif, super powered killer robot programming? Try everything at first, find out what give you that RUSH that you can feel, then when you know what you want to do, focus in on that and dedicate most of your time to that.
The only real advice I can give though is don't ever get bored or burnt out, it will kill you. Scap that, on second thought the best advice I can give is that really hot grits in the pants isn't as fun as it may sound, ouch.. It is all fun and games till someone loses a tes^H^H^H^ eye
"`Ford, you're turning into a penguin. Stop it.'" -THHGTTG
My goal as a programmer is to write elegant code. When I look at it a year later, or someone else reads it, it should be clear after not too much thinking. Making changes or adding extra functionality should be easier than you expect beforehand. You know that feeling - when your code seems to anticipate things you only think of later. (I started in C, but the same goes for any language. After a few, a new language becomes 'Just Another Language.)
As you become more experienced, you notice your view getting wider. The structure of your programs becomes more clear to you, then the structure behind the way you work. Now I'm at the point that the organisation of projects seems to me a part of the work of programming... if it's done bad, it hampers your work as programmer.
By the way: yes, I'm female but usually that's not a problem after I've said something smart. OK, I have to prove myself, but so must men in the long run.
But really, my goal is doing well what I try. And for code, that is summarized by the term 'elegant'. No matter what you program, no matter what language.
Inez{R}
To figure out how to use the CSRLIN command in QBasic 4.5 ...am I the only Slashdotter who is unfortuantly not 31337, and just reads Slashdot for the politcal stuff? Not that I wouldn't think that being a programmer wouldn't be awesome, but then I also think being an astronaut would be awesome. And to me, programming and astronauting are on a similiar level of things I won't achieve.
Just my 8% of 2 bits, I just wanted to speak up for the non-31337 Slashdotters, we are out here, and some of us are even posting at +1
Hopefully I didn't put any [] around my words.
My personal goal is challenge myself, in whatever that might mean. Ten years ago, i was happy to display random characters in random colors on the screen in QuickBasic 4.5! Now, I know C++, VB, VBScript, Perl, Java, PHP, etc. Just to keep on top of things is my goal, i guess.
Ham on rye, hold the mayo please.
thelocust[dot]org
When I get in a programming mode
Compile and run
It is so much fun
"If I were to ask you a hypothetical question, what would you like it to be about?"
So many of the current programming languages don't offer enough tools to programmers to utilize a higher level of parallelism. Even worse than that, many programs are being written in C/C++ (Not really trying to start a holy war, merely commenting on the availability of better languages, though C/C++ is still nice for lower level library routines). New languages should be popping up all over the place, writting a compiler doesn't necissarily mean compiling to machine code, why not ASCII C or C++ as your assembly language (Alla Eiffel).
Time should be spent writting routines (libraries) that allow developers to deploy accross multiple platforms, with a re-compile or even less. We are getting closer, but we aren't as far as we COULD be.
I think also a noble goal for myself anyway is to do what I can in the "real" world, and eventually get back into academia to assist in teaching the next wave of programmers...perhaps after assisting in writting the new tools.
Cheers,
Casey
- Sighuh?
Do you really like system programming? Look very carefully at what you say you want to do. If you are still in school then take every course you can get and figure out what, exactly, it is you want to do. When I started out, in school, I first thought I wanted to be a hardware engineer. Shortly thereafter I discovered software engineering and loved it. Then I happened across the a subtopic of software engineering, HCI, and loved that. So, my advice to you, if you are still in school, is to take every course you can, even if you think you won't like it, and decide from there. If you still want to be a systems programmer then good for you. But give yourself plenty of options.
My personal goal is to find a job that allows me to attend all the conferences. What I do in the mean time I haven't worked out yet.. Prefereably systems/network development...
And thus spake the Oracle:
[resisting temptation to cite numerous references from Douglas Adams]
As with all things in life, you should strive for that which gives you the most joy. As you probably have bills to pay, this may not always be the case. But if you enjoy programming, then have we got a deal for you!
You should strive for that area that most appeals to you, and (more importantly) yields the biggest paycheck. Save your money. Invest wisely. Then when you are freaking rich you won't have to work, and you can do what you really want.
"Stop whining!" - Arnold, as Mr. Kimble
My goal is to write code that doesn't break. I prefer not to do medical or aircraft work where someone dies, focusing instead on systems that would simply cause anouther depression if it breaks. (Which probably kills more people in the long run)
I tried writting user interfaces. I hated that work. I work with folks who love that work. I like flipping bits and watching them cross several busses and appear (inverted) at a different processor. I love yanking out processors that are running my code, and have my code automaticlly move to a different processor. To me that is cool, to others around me it is just a lot of work.
In other words, we are all different. I'm no better or worse then my peers. We work differently, and like different areas. I can do the work that others around me do, but they like it I don't, and vise versa.
You end up having to try things to decide if you like them. Some folks work on KDE, others userland of FreeBSD, others the Linux kernel. Given enough time one person could do all of the above to the same quality, but they would hate some tasks and love others. ANd of course as time goes on your grow, so a task you hated before you might like now, or something you used to love now just bores you to tears.
Don't be inflexable. Someday the inflexable will find that nobody cares about the awesome system he wrote and he no longer can get a job. Because he is unwilling to learn something new the inflexable person is lost. (The mainframe is a classic example, it is slowly dieing. Not because it is bad - though we have learned much about comptuer design since it was made, but because it is out of style. Do you really want to be on a sinking ship, without knowing how to use the life boat? There is a lot of money in mainframes today, but you better know something else)
Don't be too flexable. Sometimes you have to say "I can do this, but it isn't right." Or maybe you are so flexable that you get a new job every few months. You need to see a project through to completion, see what customers really think. (Open source isn't such a problem here, but in buisness you cannot contribute to two different companies at a time.)
I like where I am now, and what I'm doing. I could have - perhaps should have taken an opertunity to transfer to a different department. Only time will tell what would have been best.
Why is it that in the year 2000 we're still writing our operating systems and most of our programs in C (or C++, which, although messy, is not truly high-level)?
Because these are decent languages for the job?
[grins, ducks, and runs...]
Why is it that garbage-collection has never truly come out of the closet?
Because you lose some control over execution of your code, and in a lot of situations that's not desirable at all (real-time systems is a classic example).
Why is it that Java is compiled in byte-code rather than native code - and why is it so slow?
The native code of which processor? If you recall "write once, debu^H^H^H^Hrun anywhere" was the Java's big selling point and a explicit design goal. In any case, native Java compilers are starting to appear.
As to the slowness -- that's exactly because Java is a "more" high-level language. TANSTAAFL.
Why is it that no programming language that I know of is able to handle program invariants and proofs that are any bit more complicated than ("i is an integer") (nothing like "i is a power of 2" for example).
Well, you can always write a C++ class with properly defined assignment operators, etc. which will enforce "i is a power of two". Quite trivial, really.
On the other hand, you've been complaining that Java is slow... I don't think you'll like the speed of any high-level language.
Why is it that anyone who wishes to program anything still has to spend half of his time writing things like if ( retval == -1 ) { perror ("frobnicating"); exit (EXIT_FAILURE); }?
First, even in C there are such things (evil, I acknowledge) as macros. Second, sometimes you may want to frobnicate and sometimes you may want to discombobulate. Sometime you will just exit, and other times you'll try to recover gracefully. It all depends and that's why we spend time writing code like this.
Why is it that buffer overruns still exist?
As usual, it's a trade-off. You can run your programs with run-time memory checking (very, very useful during debugging). Memory checking, though, like almost everything else, imposes an overhead. Sometimes it's OK, sometimes it's not.
In any case, if you are programming in C++ and are using a decent library, you should have very few memory access problems. Writing in C and in the usual C style is another matter entirely.
To summarize: TANSTAAFL.
Kaa
Kaa
Kaa's Law: In any sufficiently large group of people most are idiots.
so that I can afford to spend my time writing free software, while keeping a roof over my head and a car in my garage and food on my table.
Ultimately I want to spend my time providing cross-platform tools so that the same bit of code can be compiled on the Mac, Windows and Linux and run correctly. But at the moment, the project has to languish so that I can write a web-based appointment scheduling system for a fellow whose having fantasies of getting rich in the New Economy...
Systems Pukes - Arrogant bit-twiddlers who sit around doing work no one understands but everyone needs. Occaisonally, they purposely break the system and put it back together to prove their worth.
Application Programmers - smug resume monkeys who make prostitutes look like nuns. Most of their day is spend looking for another job. The rest of the time they are avoiding meetings and hunting free food. They will leave a company for $1 more an hour but will remain loyal to a department for an $8 pizza.
Analysts - Programmers who can't code. Their functions including stating the obvious and avoiding responsiblity. The chief aim of the analyst is to create a system without a spec thereby rendering them blameless.
Project Leaders - the dumping ground of IT. Drooling pirates who will swing into meetings and lash each other with promises to the amusement of management. Then they will stagger back to the staff and announce some impossible deadline that was born to be pushed out to sea. The sworn enemies of programmers everywhere. See also "Euthenasia"
DBA's - Anal-retentive spellcheckers whose chief purpose is to slow work to a crawl.
If you aren't part of the solution, there is good money to be made prolonging the problem
The important thing is not to dig your self a big hole by becoming too specialised - become a generalist - be adaptable - than you can follow your interests as they develop. There will be cool interesting technology to play with along the way and if you become too specialised you will eventually find yourself stuck doing the same thing over and over and over again.
The other thing that I think is a usefull (non-programming) skill - become a 'self-starter' ie don't need a lot of management to get your work done - let your enthusiasm drive your work - you'll probably get ahead a lot faster and you'll be able to work in smaller more cutting-edge companies
For me programming is a break from reality. Naturally having a goal in mind makes it more interesting, but in general I just do it for the hell of it. I mess with all sorts of languages but rarely take the time to become proficient with any particular language--unless it's simple enough to learn before I find something else interesting to learn. While I'm programming it's as if I've left my body and I've entered another dimension. I don't hear people talking, see the monitor, or feel my fingers on the keys. I'm just somewhere else entirely.
numb
My programming Goal is to finish the Do Stuff(c) Functions a Libraries. //or your languages equivalent //again your language equivalent //ditto }
A program that will Write your programs for you by simply declaring the dostuff function. Basically
#include "dostuff.h"
void main(){
dostuff();
Viola You are done My Only pittfall has been, actually writing it. I designed it to write itself Recursivley.. But so far my hardware doesnt want to comply.. And yes I wrote the original Segfault story on this so it _is_ original even if you have read it there before.
--------========+++Dont Feed The Lab Techs+++========--------
The more you know, the more questions you ask.
"`Ford, you're turning into a penguin. Stop it.'" -THHGTTG
Outstanding expression of your goals. Expressed elegantly in clean, aesthetically-pleasing, efficient statements. In short, I suspect this is the whole ball of wax when it comes to programming. I'm brand new at it, and you've quite eloquently mapped out precisely how I feel about programming, and why I enjoy it. I think I'll hang on to this as a reminder for those frustrating days when I wonder why I chose this field. ( which are few & far between )
Make it simple, easy to understand and maintainable.
Do not make it cool. Do not show me how well you know C++, Perl or Java. Do not make it subtle. Do not make it fast. Do not make it cute. These things hurt code.
Make it simple to understand and work on. Make it look like a Model T engine. Comment everything. Refactor for simplicity whenever possible. Speed will come as things develop. If it is too slow, profile the code and fix the slow bits. Follow these steps and the system will be easy to maintain. Customer ordered changes can be quickly and painlessly accomidated. And, when your contract ends and you have more interesting work to do, you can hand the code to anyone and they can maintain it. Job security sucks, it chains you to one spot, ends your career and keeps you at work away from your wife.
Mr Huber
Ex Building 17 Orange Badger
Kraaash your enemies...
see dem driffen before you...
und hear de lamentations uf dere wimmin...
Actually, my main goal in going into Systems Analysis/Programming was to only have to relearn half of what I knew every two years, instead of all of what I knew (when I did hardware).
I try not to get to hung up on OS, or Programming Languages - they're just tools we use to provide frameworks for solutions. Each has it's quirks.
To contribute to society - that's one of my goals. I used to want to code the best game simulations - somehow, that went out the window. Once you've got a bunch of money, that ceases to be such a big deal - so skip that as a motive.
To design a system that, while not the most efficient or fastest, allows one to get one's job done in an elegant and robust fashion - that's what I like doing. I may not make the best wheel, but my wheels allow you to change the tires while driving and use bigger wheels with different treads. I've found my code being used by other people more than ten years later - because it just keeps working. Elegence, simplicity, robustness.
The rest is all carp. A thousand years from now, all the things you think are important will be, at best, a joke.
Will in Seattle
I don't have goals in programming, except for specific projects. Goals are limiting, and only suited to the short term in such a dynamic field.
I have values: it is good to become a better programmer, it is good to learn more mathematics (the better to create accurate computer models of problems), it is good to learn more about how people interact with machines and what they want from them, it is good to learn more about my own mind and how I learn and how I work... I could go on for pages describing what I value.
The important thing is that general "goals as a programmer" are not worth having. Whole fields may become irrelevant by the time you master them, so you must always be learning. The programmer must be a generalist in principle, even though he spends a year or twelve with his main focus on one particular area, because any specialized field will eventually be made trivial by an advance in the state of the art (and the obvious reasons to delve into a particular area are that there's work to be done, you find the work interesting or profitable, and you think you can do it). Today's divisions into "interface design", "systems programming", "language design", "web scripting", "graphics engine programming", "hardware design", etc. (let alone narrow subdivisions like "Windows programmer" or "Playstation developer") are all arbitrary categories describing certain temporary conditions that must be dealt with. Twenty years from now, there will be a whole new set of programming tasks (though some of the names might be the same, the problems will be entirely different ones), and you'll probably still be programming. Prepare for it, by preparing for anything.
'Intelligence is life's response of "I can do anything!" to a universe that threatens with everything.'
-Frank Herbert in "Destination: Void" (quoted from memory; not exact)
My goal would be to make high-level languages (functional if possible) really usable - and really used.
Why is it that in the year 2000 we're still writing our operating systems and most of our programs in C (or C++, which, although messy, is not truly high-level)? Why is it that garbage-collection has never truly come out of the closet? Why is it that Java is compiled in byte-code rather than native code - and why is it so slow? Why is it that no programming language that I know of is able to handle program invariants and proofs that are any bit more complicated than ("i is an integer") (nothing like "i is a power of 2" for example). Why is it that anyone who wishes to program anything still has to spend half of his time writing things like if ( retval == -1 ) { perror ("frobnicating"); exit (EXIT_FAILURE); }? Why is it that buffer overruns still exist?
My goal as a programmer is to continually increase my fluency in
I hope to get there by three main methods:
I've been at it for 20 years, and am still learning every day. I get just as many thrills from it all today as I did when I started.
TomatoMan
-- http://frobnosticate.com