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 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:
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
> 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.
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?