Why I'm a Programmer
nathan.ca
nathan.ca
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?
That was the point I decided that there was no sense pretending anymore and got into a different line of 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.
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.
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.
> 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".
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?
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.
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).
I get what he's saying, but that part is a little naive. You can always help the people around you.
Disclaimer: Programmer who wishes his professional work contributed more to the greater good.
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.
"... 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?
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.
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?
(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..."
...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).
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.
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.
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.
That's my view, challenging and rewarding, that's programming.
Whereas if one is a doctor or lawyer, introducing innovations into the field is much, much harder.