Hacker News new | past | comments | ask | show | jobs | submit login
Why I'm a Programmer (nathan.ca)
65 points by toddynho on Jan 1, 2013 | hide | past | favorite | 42 comments



I am programmer because I am naturally curious and because I love creative problem solving. What honestly pisses me off, is that these days programming is way more boring than what it used to be. The paradigm has shifted from low-level to high-level and as such we've lost steady, stable interfaces and systems and moved to very rapidly changing playground which promotes dirty lookups of stackoverflow and google for details and quick hacks over problems, rather than coming up with creative, well thought solutions and superior implementations to problems faced. I simply can't keep up. I love C because I can say I am very familiar with how it works, with what it interfaces and how set of libraries operate. And that has been for 10 years, and will probably remain so until the end of this decade - at least. But working with things like C in 2013 is about living in the past. The future is now. The future is more rapid changing systems, less truly understanding how things work, and more and more just looking up what's needed and then hacking it together.

I am afraid of change, because it requires me to move out from my comfort zone to something which does not interest me nearly as much as what originally got me into programming - understanding how a computer works and how to tinker with it. These days there's no place for actually understanding systems when it comes to modern programming tasks which mostly happen in the web space.

Makes me feel sad. What to do? Have others moved to something more modern from mere bit twiddling and actually found the new ways interesting?


There's more to programming than just the web. There are embedded systems (where C is alive and kicking), telephony (where I work writing test cases for call processing for some new cell phone features---a mixture of C, C++ and Lua), scientific (C, C++, Fortran; possibly other languages I'm forgetting), big data, games (non-web based) and probably more areas I'm forgetting about.

For me, I have my day job in an area nearly unrelated to my interests. That way, I have the freedom to work on my own stuff at home (and yes, this has been cleared with work in any case), which includes fringe operating systems like Synthesis OS (http://valerieaurora.org/synthesis/SynthesisOS/) and even Sparrow OS (http://www.sparrowos.com/ ---just becuase the author is schizophrenic doesn't mean his work has no merit).


It is entirely possible to move higher up to very HLL's and still have a very deep understanding of how things work.

I have been using Haskell, a very high-level language for about 4 years now, and there is so much deep stuff to learn. Not superficial "playground is changing" stuff, but deep, nature of computing and logic stuff.

The Haskell eco-system is very open, and the optimizers and compilers have excellent utilities to look under the hood. This all makes it very possible to actually understand what's going on.

It is definitely harder than it used to be, because we're using more sophisticated tools to solve larger problems.


I'm sorry, could you be more specific?


I started learning Haskell for the same reason that Peaker described. From what I understand so far, Haskell is a very high level language which lets you do more with less.

One of the examples that come often is quicksort which you can write in like 3 lines:

quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) where lesser = filter (< p) xs greater = filter (>= p) xs

But the thing is you still have to understand a lot of stuff before being able to use it correctly. I think one of the most difficult (and interesting) topic would be monads, there are tons of tutorials online if you're interested on reading on it.


It's not a quicksort. It's a quasi-quicksort, which is actually not quick due to memory allocations.

Here's how quicksort looks like in haskell:

    import Data.Vector.Generic
    import qualified Data.Vector.Generic.Mutable as M 

    iqsort :: (Vector v a, Ord a) => v a -> v a
    iqsort = modify go where
             go xs  | len < 2   = return ()
                    | otherwise = do
                        p <- xs `M.read` (len `div` 2)
                        m <- M.unstablePartition (< p) xs
                        go $ M.slice 0     m         xs
                        go $ M.slice (m+1) (len-m-1) xs
                    where len = M.length xs
Or something like this (u-u-ugly) http://www.haskell.org/haskellwiki/Introduction/Direct_Trans...

At this point it's less for more.

I don't understand why they chose quicksort to show off.


The post I replied to said:

> I am programmer because I am naturally curious and because I love creative problem solving.

Which is still an excellent reason to be a programmer.

> What honestly pisses me off, is that these days programming is way more boring than what it used to be.

Completely disagreed! He's just focusing on the wrong things.

> The paradigm has shifted from low-level to high-level and as such we've lost steady, stable interfaces and systems and moved to very rapidly changing playground

I was trying to say that moving from low to high level does not mean losing stable interfaces, and it doesn't mean we need to have a "rapidly changing playground".


You make a great point. Though what you yearn for still still exists (and will continue to). Maybe its just that you are so wrapped around the internet/startup craze where no system is made to outlive the calendar year. You should look into (industrial (embedded)(robotics)) applications. Very tough problems, and very little brogrammers/rockstars. There is more money in those markets too. I know people who clear half a million working with embedded applications like the mini2440 board. Problem with this market is that it is not publicized like the web 3.0 startups. Its a bit hard to break into it due to the fact that it is one of the best kept secrets out there. Want to break in? Buy some embedded boards (like the mini 2440), install Linux ? android : tiny, interface it with some hardware (like control the lights in your house (which is simple)), and blog about it. But don't blog/tweet/like about it. just create a nice simple blog. Then send links to the blog to the people whithin the industry (or just do a Show HN post). Do hangout in forums having to do with embedded applications/robotics.


After doing a lot of web development, this is how I'm starting to feel as well. That's why I'm shifting my focus to AI and deep learning; it's a field with a lot more real computer science problems that you actually get to think about and solve on your own.


I find that it's easy to fall into the trap of feeling like working as a software developer in the commercial world is an exercise in applying duct tape.

But I think this is a mindset problem, not one with the state of modern software writing. We're standing on the shoulders of giants; There's plenty of unsolved problems out there to be solved by the next person willing to do it. And we do it armed with the work of the previous generation that's been packaged into the convenient form of libraries, modules and established knowledge.

Would your time really be better spent finding the most efficient sorting algorithm?


> Would your time really be better spent finding the most efficient sorting algorithm?

Probably not, but it is my nature to work with problems like these. Not necessarily to find best algorithms, but to come up with the most efficient implementation of the said algorithm. I don't mind counting cycles, going deep into memory cache models and pipeline depth and calculating branch probabilites to balance and research different implementation details. I would love that kind of stuff.

On the other hand, I am not a programmer because I wan't to create things. Creating something "cool" is irrelevant for me. It does not drive me. I am a programmer because I want to do creative problem solving. I want to come up with superior solutions to problems which require deep understanding of how the system and the environment works and operates. This, of course goes against how the progress happens - to ease things, to make everyone able to make everything.


Outstanding. This is how I feel as well. It seems things are so abstracted away these days, you just need to take it for "face value". I had found myself going to Google and Stackoverflow looking for answers while attempting to learn programming. It was somewhere along those lines where I was honest with myself and said there's no way I'm a programmer - I'm just using other peoples' code and reverse engineering it.

That was the point I decided that there was no sense pretending anymore and got into a different line of work.


"if I had chosen instead to be a lawyer, or doctor, or some other “accredited” profession, I very likely would’ve helped a grand total of zero people in my career thus far, and couldn’t for another five or so years given that I (likely) wouldn’t even be in law or med school yet."

I get what he's saying, but that part is a little naive. You can always help the people around you.


Agreed. And this thought process is effectively shortsighted: "I can apply band aids now, which is superior to gaining the knowledge needed to perform surgery because that would take too long."

Disclaimer: Programmer who wishes his professional work contributed more to the greater good.


It's not just naive, it's incredibly arrogant. As much as I'd like to think otherwise, doctors contribute a lot more to society than programmers do.


Arrogant? I think you missed the most important part of that statement.

"... couldn’t for another five or so years given that I (likely) wouldn’t even be in law or med school yet."

You can become a "programmer" at 18 for example. You can't become a "doctor" at the same age though - Doogie Howser excepted. He never said that doctors aren't important or that he believes that programmers contribute more to society than doctors do. He said that the path he chose enabled him to give back earlier and in a grander scale than compared to the traditional paths to become part of the doctors and lawyers of the world... And he is correct in making said statement.

How about if next time you call someone arrogant, you make sure you didn't leave reading comprehension out the door?


His point here is that being a programmer is better than being a doctor or a lawyer because you can begin contributing at an earlier age.

Here's the "arrogant" part: for that point to be valid, one has to assume that the future contributions of being a doctor aren't worth as much as the contributions to software one made as a teenager. From my point of view, that is simply not the case.


That is something that was not said or implied on the text in question. As a matter of fact, the point given across has very little to do with how helpful either one of us perceives a programmer's and doctor's "contributions" over the course of their careers, but how there is no age limitation which stops a person from "helping" others and how the "value" of your service is determined by talent, discipline, and effort while not necessarily being attached to a title.

Here's a thought, I come a family of doctors, lawyers, and architects (in order of occurrence within the family), and I've achieved the realization that thinking the "importance" of a person is defined by their profession is incredibly misguided. Being a doctor does not mean that you'll save a life, and being a programmer does not mean that you wont. Actually, there are as many type of doctors as you have organs, diseases, and appendages, as many lawyers as there are clauses in a EULA, and as many programmers as programming language books... and all of them are just people whose helpfulness will be defined by what they do with their life's and not because one's a doctor and the other a circus clown.

I'm not trying to be mean spirited or demean the work of doctors or lawyers (or programmers for that matter), but you've stated that the article's writer sounded arrogant because for you his opinion was only valid if it followed a specific train of thought that lead to a direct comparison of two stereotypes - the lifesaving doctor and the cave-dwelling programmer - and I believe that to be wrong. I know I'm being overly dramatic with my examples, but let me finish with one small nugget: Who's "contributions" are worth more? Neil deGrasse Tyson's or Dr. Robert Rey's?


It's not arrogant. His point is that other people has been using his code since he was very young an therefore he's helped a lot of people. Being a doctor or lawyer takes a long time and at his age he would still be in school.

It's not that doctors or lawyers don't contribute to society. They start contributing at a later point in their lives because they were in school.


How so?


I think he meant helping people out as a function or extension of your profession. You can help people regardless of what your career choices are/will be, but you cannot (legally at least) perform brain surgery at 15. You can however create bulletin board software at the same age and distribute it to a large audience.

(Hypothetical) "Dude I can help you get up if you fall, but I can't help you survive cancer as I'm not a doctor yet, but I can make some software to schedule your medicine intake and therapy sessions though..."


I'm a programmer because I'm curious and lazy. I see a problem, do it once out of curiosity (or because I'm being paid), then never want to do it again (curiosity satisfied, now it's boring). Avoiding "over and over again" is what keeps me from homicide, and incidentally, employed.


This is the reason why I am a programmer too! I'm flirting with devops lately and it's being so much fun.


I hate to be the one to say it, but I didn't feel very inspired by this post. I felt the author could have been a little more modest about his accomplishments. It almost read like a resume highlighting his biggest development accomplishments. I don't think I can blame him though because I was just as proud at that age. If you do programming long enough, and particularly as a freelancer or independent, you'll become quite humbled. There are moments of pride and accomplishment, but it can be very humbling with all the competition out there.


I think citing notable accomplishments was important in supplementing the point he was making. I also think that also allows us to relate better to how he feels. E.g. would he feel as proud, and would we relate as much, if this line ...

...software I've written has helped people capture >tens of millions< of dollars of wealth. It's been run on >hundreds of millions< of computers.

... instead read ...

...software I've written has helped people capture >hundreds of dollars< of wealth. It's been run on >tens< of computers.

I don't think so - scale of accomplishment change how we feel about what we do and how we relate to the motivation of others. And I think that was the rationale in citing some of his biggest accomplishments. I didn't take his post as lacking modesty.

Point taken on the freelancing bit though (upvoted on that point ... I've been a consultant for 5 years).


I don't so much see myself as a programmer (and I'm not one professionally, still at university) but rather an engineer. An engineer who works with software, I love building software but the joy I get out of programming is no different to that which an EE would get when building an appliance. It's the actual building of something useful, solving a problem, that instils my love of coding. I'm an engineer who has a passion for software would perhaps be the best way of putting it.


Programming is like Drawing.

Drawing the blueprint of an engine is not the same as understanding the fundamentals of physics and engine design. And it's not the same as drawing a portrait, a building or a landscape.


I am a programmer because it's the closest I could get to being a wizard.


> Writing the code is the easy part. I’d say code flows from my brain more fluently than English does.

There's a certain irony in this statement. Writing code that works is easy, but writing code that clearly communicates a simple design to other programmers is not. Much like the difference between rudimentary use of English and that which is moving or persuasive. One is mechanical, the other achieves multiple objectives and requires a mastery of empathy.


I have a profound respect and reverence for people who pursue careers (or anything, for that matter) because of an innate passion. Unfortunately, I don't really feel that way about anything that could be considered or performed as an occupation. Certainly not programming. For me— and probably a lot of others— the allure of programming is in the intuitive ease that some find with it, combined with the inordinately inflated salaries.


>> For me— and probably a lot of others— the allure of programming is in the intuitive ease that some find with it, combined with the inordinately inflated salaries.

If you feel that you're getting paid too much to sit for 8 to 10 hours solving problems by writing code into a machine and trying to work with a team and trying to meet specifications and ultimately what the customer needs; you should ask for a salary reduction.


Why?


For me programming started as a means to an end. I am entrepreneurial and I realized the www was a frictionless distribution method for many great products and services. I was naturally curious about how things work so it was easy to learn the skills. Now a days I get joy from solving and automating but I try to remember that I was an entrepreneur first and in the big picture hacking is still a means to an end.


>> To put this in perspective, if I had chosen instead to be a lawyer, or doctor, or some other “accredited” profession, I very likely would’ve helped a grand total of zero people in my career thus far, and couldn’t for another five or so years given that I (likely) wouldn’t even be in law or med school yet.

That's my view, challenging and rewarding, that's programming.


I have also found that one of the motivations to program is to do things that have not been done before. Everything you create is an innovation, in one way or another.

Whereas if one is a doctor or lawyer, introducing innovations into the field is much, much harder.


That's a very good point. Doctors and Lawyers, to take your example, are obviously intelligent and by definition successful people. Yet their success is capped, there is a ceiling in these careers - a lawyer can never really change the world affecting literally millions of people. Sure he can work on an important case, and sometimes the law can change as a result of important cases (well not so much the law, but the interpretation of it) but he/she will never make a world-shattering breakthrough, a product used by hundreds of millions of people, in the way that a software engineer can.


If you're a doctor it's much harder because a lot of innovations in that field now require both at least a doctor and a programmer ; )


You don't need a programmer to develop new surgical techniques ;)


I've got some shit I want to make. There's some satisfaction in making beautiful algorithms but not nearly enough to keep me slobbering over this autistic sex-substitute roadkill. I program because there's some shit I want to make.


chicks dig programmers


If this was reddit I would have upvoted you!


Reddit. I don't like that word.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: