The disappointment was that the actual job did not entail data structures, Algorithms or even skipping! Just CRUD web apps.
I get that every small company wants "the best and the brightest" in order to have more value on the table under acquihiring conditions, but there's really no reason that the person programming Facebook's Android frontend view-controllers needs to know how to answer doctorate-level category-theory questions.
You need a couple really crazy smart knowledgable people. And then fill out rest of the team according to their roles and fit.
I am seeing some stuff right now that blows my mind, complete incompetence getting promoted to executive levels. Unbelievable.
And you've never asked?
Note: that's not to be racist against TCL but things being what they are in the trade - spending 3 miserable years with TCL expertise to show in my CV would be suicidal.
List *Reverse( List *pList )
List *pPrevious = nullptr;
List *pCurrent = pList;
while ( pCurrent )
List *pNext = pCurrent->GetNext();
pCurrent->SetNext( pPrevious );
pPrevious = pCurrent;
pCurrent = pNext;
We ask these questions for a few reasons. You hope that the candidate hasn't seen it before, because you want to see their problem-solving process. You also want to see which questions they ask, which assumptions they make, etc. How well do they explain their thought process? Do they understand the algorithm, or did they rote-learn it?
Will they need to jump through algorithmic hoops writing a CRUD app? Probably not...but they'll need to solve problems creatively. It might be better to walk through an actual investigation+bugfix in a piece of software, but that takes more time to do (interviewer+candidate) and more effort (interviewer) to set up, so it's not surprising that most interviewers would take the easier way out.
The algorithms thing is pure cargo cult behavior (Google asks about them in interviews).
Over my looong career doing CRUD applications (& proudly loving it), I've seen too many over-engineered programs and "business logic" introduce just to compensate for poor data models.
Wit/sense of humor is an indicator of intelligence. Which means even if you are not entirely familiar with the whole stack of tech we use, you will pick up things fast.
Sense of humor also helps immensely in crunch times...
Its just the algo stuff you usually have to review before hand vs all the others
Which is to say your justification is very much "75% of our interview process makes sense, it's only this 25% that you almost never needed any any previous job, you don't need at this one, and if you're self-taught you probably never learned in the first place, but we're going to ask you anyway because it makes the interviewer feel smart."
There's the problem. If it's something you have to review, it's not something you use that often. Unless the job is going to have you using it often, why is everyone's time being squandered on it?
I find software architecting, developing, and operational troubleshooting to be fun, requires a holistic view of a problem set, requires creative problem solving and more.
I find development an outlet to create (make) stuff. I work at a university on the east coast of the USA and am on a high performing team that has not lost a member for at least 5 years. We love each others talents and respect each other's abilities.
I expect to work full time till I am at least 67 and hope to be able to work part time till I am ~70.
Edit: 62 years old not 63
What languages and technologies do you use?
I run the development shop for backend and the cms and I am the scrum coach for all development work. I am by far the oldest and we joke that I am the resident curmudgeon, but in reality I am a pretty positive person.
I do mostly backend development in the order of priority:
- java 1.8 (love hate)
- python (love)
- bash (necessary)
- php (meh, only as demos for people that don't know how to do something)
We use cloudfront as a cdn and our web is php based. But we have UI developers for 99+% of the pho work.
I wrote a java middleware system 5 years ago that is old and very hard to extend. We are replacing it with spring based apache camel code and routes. Love, love, love apache camel)
Db is Oracle because we have a site license. I occasionally write sql for others that don't know or need to know SQL.
Our CMS is cascade by Hannon Hill. A publish only CMS and we love it. We are 100% in control of all the code that runs in our web. ~140 web sites, ~129 are branded for our university.
Web Servers are RHEL, load balanced by F5 load balancer. Backend XML database is Exist-db (love this as well). Exist-db uses xquery but I don't do any xquery. Apache httpd (love for sites out size of traffic) with Zend Server (love hate but necessary for Oracle connectivity from apache httpd). Yes I could compile our own apache httpd with oracle libraries but that is strongly discouraged by our data center staff.
Of course we use git. HipChat, BitBucket (free private repos for non-profits). I do development on Mac OSX mostly and port. We never have porting problems.
I'm sure I'm missing something that that is most of it.
Been hearing much about eXist but haven't had the courage to get my feet wet. Maybe some time this year. I don't use Oracle, have had all my clients on MS SQL Server (BI Cubes and reports) and they're happy. So am I. Not religious about this anyway. Have been dying to convert some of our consulting wares to pgSQL - soon.
I don't intend to impose my views or perspectives on you or on anyone here (as I'm sure you have your own practical conclusions about what traits are important for developers to keep positive attitudes towards their careers). But after nearly leaving the field twice in the last 10 years I can, with humility, say this:
I am more and more convinced that for a developer to continue retaining "mojo" in the field, and consequently to enjoy his or her work, he/she has to possess at least two traits:
1) Have the courage to try out new languages/frameworks fearlessly. (I am a bit of a coward here.)
2) Be a finisher. If you can complete projects - even if they're small (actually, the smaller the better)
- you can always look back and say "I did that. That system they're using there ... I had something to do with it." I know the spouse couldn't care two hoots but it is the stuff that keeps me alive with hope. There's something deeply Marxist about this - I know - but I don't want to philosophise.
I can see you possess both.
"I run the development shop for backend and the cms and I am the scrum coach for all development work. I am by far the oldest and we joke that I am the resident curmudgeon, but in reality I am a pretty positive person."
I can see. :-)
Keep well. (Beer next time on me)
- Edited for clarity
> 1) Have the courage to try out new languages/frameworks fearlessly. (I am a bit of a coward here.)
> 2) Be a finisher. If you can complete projects - even if they're small (actually, the smaller the better) - you can always look back and say "I did that. That system they're using there ... I had something to do with it." I know the spouse couldn't care two hoots but it is the stuff that keeps me alive with hope. There's something deeply Marxist about this - I know - but I don't want to philosophise.
Agree 100%. Working in the bank (really a credit card bank at the time) taught me so many ways to overcome obstacles and to get the job done. Plus now 11 or 12 years of scrum (agile light) helps. I am a director so I am required to be the face of web development with campus units. Interpersonal skills, collaboration and an understanding of company, working units and individual's culture and how to use that to you advantage helps immensely.
Stay positive, keep a sense of humor.
A few months ago, I had an idea for a side project that could lead to a lucrative business. I ordered a used Thinkpad with no operating system from eBay, and off I went, developing the same sort of website I do on a $1,500 MacBook at work. If I already had a laptop lying around, I could have just reformatted it and used it without spending a dime.
When I lost my job in the city and had to move back home in 2011, I didn't have a computer except for an old Windows desktop. I pulled it out of storage, formatted the hard drive, installed Linux and Rails, put my resume on Craigslist, and within a week I had signed a contract with a company as a remote developer. I was lugging that desktop around everywhere -- on trips to visit family, to co-working sessions in hotels, to my new employer's office -- looking just as goofy as I wanted to, but didn't care, I was working again.
Edit: I see my post is gaining upvotes quickly. If any open-source project maintainers are reading this, thank you! My story would not have been possible without your time and effort.
"Compared to lying on a beach drinking cocktails, it's difficult. But compared to a coal miner, it's ridiculously easy."
- way better pay (not everywhere pays developers like the US)
- kept me in shape
- I slept a lot better during that job
- satisfaction of jobs completed (no maintenance for topo data)
- no micromanagment, open plan offices, daily stand-ups
- predictable, stable working hours
- etc. etc.
any day of that job was much worse than programming when programming on a good day, but programming on a bad day is much worse than any day of that job ever was.
A bad day at the physical work was just cold, windy, hard work, muscle aches. Luckily I never got injured and I didn't know anyone that died there otherwise I suppose my opinion of the two works might be different. But I've worked other hard physical labor; for example - ditch digging - cold, muddy, and a real workout, less strenuous - washing dishes in a restaurant, bussing tables.
Again - all preferable to programming on a bad day of programming, maybe it's because when programming goes bad I keep thinking about it afterwards, the other work I forget it right away - hell, I don't even really think about it when I'm doing it.
I think it's very easy for people who aren't working with their hands every day to sit back and talk about the 'satisfaction' you get. You may get that if you go and do it for a day. When you're doing it every day you're destroying your back, knees, your hands end up cut and calloused, and you're exhausted. And the 'satisfaction' probably doesn't make up for the lower pay manual labour jobs typical come with.
+ your hearing, it can be very noisy in a mine.
I'm from a coal mining region and some of the miners hate the job with passion and curse it every day as they get on the comutter's bus. Others are more indifferent about it and even enjoy some aspects of it (mostly camraderie). I'm pretty sure the majority of them would switch for ANY office job that pays the same.
My general thoughts on the "I'm unhappy doing CRUD" sentiments is that people generally tend to get bored with what they're doing and the dream of one day doing something else, something more fulfilling, relieves the pain somewhat. Funnily, for pretty much all the alternative careers that devs talk about, there are internet threads where people working those jobs are discussing how to retrain as a software developer.
It's totally different when you can barely afford your mortgage, you're in debt, and you have no chance of getting a better job.
Compare that to releasing code 4 times a year. The stuff I'm working on now won't be in production until September.
EDIT: Not as a job, but working for weeks, daily on a personal project.
I mean I can't even put into words how ridiculous this comment is.
I'd rather be the Plumber for a skyscraper development than the accountant for it...
Life is hard no matter what. We don't need to look at people who have it objectively much harder than us and say "but these florescent lights give me a headache" to try and make our lives seem harder than they are, just like we don't need to look at people who have it objectively much easier than us and say "they have so much money and free time they couldn't possibly understand how hard I have it."
These days it's mind numbing Java CRUD services all day long, then I work on my own stuff (in any language but Java) at night.
I estimate he made probably close to $200k, in 2016 dollars. And, he wasn't even a 'lead'. In total compensation, he made more than I do. And, IIRC, CPI inflation calculations don't account for home inflation, and we all know that housing costs as a portion of total household spending was much, much less than it is today.
31.47 * 50 wks (2wks vaca) * 5 * 8 (a work day) = $62,940
I've done manual labor. I feel when I did carpentry it was more rewarding than software development.
All other mortals are in a way or another struggling. Pulling all nighters(because it's expected), having long periods of stress + burnout.
The advantages I see are that the money is good and that people(me included) love programming. Having a job doing something you love is definitely a blessing. The biggest of them.
For that I get paid a decent salary for my area, get to do a job I find interesting, and without having to live in London.
I personally like London very much, but eight years of it (and now just a day every two or three weeks) was plenty for me.
My mother had of course never lived in London, just visited once as a tourist. And if you are a tourist you are likely to end up in the busiest, noisiest, smelliest and most expensive parts. But once you live here for a while, and realised how enormous it is, and how many completely different experiences you can have and how many different things you can make of it, there really is something for just about everyone. And now I've settled in a relatively quiet and green area, even my mother is willing to concede that maybe London might have some nice parts.
It's not easy to get a 6 figure GBP salary outside a bank or contracting (usually with a bank), but north of 50K is very doable, and there are a lot opportunities. Rent / mortgage is a low fraction of income especially when your significant other is also making a similar salary (it's about 20% for myself and GF).
There are just so many tech jobs available in London. And once you have a job, you have much more flexibility to change jobs without having to move home. This might not be a consideration when you are younger and more flexible in terms of location, but I do know some people who have settled in other parts of the UK who now have families and feel stuck with their current employer due to lack of other opportunities in their area.
And it isn't just the jobs, but also the developer communities. If you live in Shoreditch, for example, you could go to a tech meetup (many with free beer and pizza) within walking distance of home pretty much every night of the week if you really wanted to.
I looked at relocating from London back to Scotland many years ago, and was perfectly reconciled to halving my salary given cost of living and quality of life considerations, but it was simply the relative lack of opportunities that was the main issue in my case.
Of course if you're happy where you are, then stay there. Tis just another option you may not have considered.
That said the average salary isn't worth it at all, but the top end is. You can't really get 6-figures outside of London, but there's plenty of banks that pay that in London.
Plenty of money to burn in one of the most expensive places in the world for many people probably means just that: A lot of money earned but nothing to show for after years of work.
Compared to that you can make a decent living as an engineer almost anywhere in the world and not blow away all your hard-earned money at the same time.
Then, there are almost certainly Silicon Valley companies where you face stress, burnout and dysfunctional management just as you would in your run-of-the-mill enterprise company that merely treats developers as fungible grunt workers.
The thing that many engineers - perhaps more so outside Silicon Valley - don't seem to get is that they don't have to put up with that kind of abrasive behaviour. That's the most important privilege that comes with this profession nowadays: You basically don't have to struggle to find a way to make a decent amount of money as much as other people do.
If your work environment is a Dilbertesque nightmare you don't have to just endure that until you retire (or drop dead due to stress, whichever happens first ...). Opportunities are a plenty, not just in Silicon Valley but almost everywhere today!
1. The multitude of small wins that you get throughout the day as you solve problem after problem, all from the comfort of your chair while you drink coffee and listen to music.
2. Creating something from nothing, not unique to software engineering but it is super satisfying to see something that didn't exist before start to form in front of you.
3. Whenever I see some one do data entry or some other laborious task, that I can automate in under 15 minutes, it makes you appreciate the fact that I know how to solve this problem in a more efficient way. People dismiss this because they don't understand that it takes me 15 minutes to write a program that inserts 1 row or 1 million rows, the work stays the same, this is not true for manual labour.
The delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of imagination. Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself.
There's always interesting challenges involved, which sadly gets dismissed as "business logic".
If CRUD apps were really so brainless, there would have been a race-to-the-bottom plethora of platforms/tools by now that allow domain experts to create their own applications.
Another way to look at is that CRUD apps put food on the table for you guys. Be grateful!
It's interesting that people develop CRUD applications in garbage-collected languages because manual memory management is a pain, but they'll gladly expose manual data management to the end user without worrying about analogous data bugs.
If data bugs are important, you need your data management system to have some qualities of a garbage collection system (tracing, reference counting) or it needs to be self-repairing (fill in missing data on demand). This is actually a challenging problem, assuming your data is important. This is why cache invalidation is one of the Two Hard Things in programming according to Martin Fowler.
These are mostly my ideas (not that there are any truly new ideas), but they are more-or-less the result of trying to write idempotent services. That is, making sure the same request always returns the same response (modulo incremented sequences). Analogizing data issues to memory management is very useful to software developers that haven't been beat up by data availability and consistency issues in the past.
It's also useful to study functional programming concepts, especially data immutability and data structures that work within that limitation, to identify possible design patterns for organizing things that themselves don't change.
For more inspiration, learn about the plumbing of git if you haven't already. The fact that commits never change buys git all sorts of things.
How do I model this in a database? I treat (table, sequence_id) pairs like I would memory addresses (or git objects). And I try to design append-only tables as much as possible. No UPDATE queries. Only INSERT (malloc) and DELETE (free). There are a lot of nice benefits here, including the ability to shard based on the age of data, being able to aggressively cache partial results and recalculate only when things change, etc.
To that end, most data is best modeled as a time series if data consistency is an issue (and it is if you need to scale). There are exceptions for axiomatically true things, like mathematical calculations, but for the most part things like "how many users like sandwiches" change depending on when you ask them. So the right question is "how many users like sandwiches as of 11:32:23 today?". Or maybe "how many users liked sandwiches when you ran calculation job 432342?" Then you can collate timestamps or sequence IDs to see if some data is stale, if unused data can be cleaned up, etc.
I love CRUD apps. I especially love CRUD apps that are so simple that end users love using the app. And the best part about such projects/apps? The data that you collect over the months and years. With properly designed data models, the accumulated data for analytics and interactive feedback is worth gold. Then let's see who calls it CRUD anymore.
Also "CRUD apps put food on the table for you guys. Be grateful!" is a really broken way of thinking. Salary after a certain point doesn't increase happiness that much  so there is no good reason to work on CRUD apps if one doesn't like that and can cover their needs otherwise.
When you say "90% brainless" you're neglecting that fact that there are arbitrarily complex rules/requirements behind each of the letters in the acronym "CRUD". Moreover UI and "nice connections between the data" are incredibly rich problems especially when you consider scale, market-- and let's not forget the fact that the fruit of this labor has to make money at some point.
What do you mean?
... until you started using it!
I've been building stuff using GWT for the past 5 years, so I'm either doing it wrong or I'm completely missing something.
So, what's wrong with GWT?
Problems that seem to get mentioned a lot:
1. Difficult to develop or debug without custom IDE plug ins. With Google cutting back on their investment, not clear how well those plug ins will be maintained in the future.
4. Remembering the rules for what Java code can or cannot be compiled by the GWT compiler.
5. A lot of indirection. The event model has definite benefits, but it also seems to make it very hard to figure out what the program will do by just navigating the code.
6. Difficult to find developers willing and able to work on a GWT code base.
Interesting, I'm just using IntelliJ IDEA and their GWT plugin.
What are they using?
Fair enough, it does take some getting used to it.
I'm not sure why this matters?
I thought that's the idea when you add another abstraction layer.
> 4. Remembering the rules for what Java code can or cannot be compiled by the GWT compiler.
Oh I think I get it now, they haven't migrated to Super Dev Mode yet.
That way it no longer requires a browser plugin (the old devmode), and the code is just JS + sourcemaps.
And if you use code that can't be compiled, you know straight away, not just when doing a production compile.
> 5. A lot of indirection. The event model has definite benefits, but it also seems to make it very hard to figure out what the program will do by just navigating the code.
I don't agree with this, but I'm probably biased as a Java guy.
> 6. Difficult to find developers willing and able to work on a GWT code base.
I'm available :-P
But being serious, thank you for the write-up, you do have some good points.
Last update was when, 2014?
Last try :-)
> Last update was when, 2014?
The one thing I can't argue with is the money. Everything else has been highly volatile.
Dumb luck on my part? I don't know.
That might be atypical because I spent more than half of my time freelancing which gives you great freedom in steering clear of harmful people and confidence to leave any employment when it stops being benign.
- The knowledge that there is often no physical, tangible output to your work (as XKCD put it, you press buttons to make a pattern of lights change until it's "correct")
- The damage done to your body from sitting at a desk for most hours of the day
- The knowledge that, in some areas of some countries, billions of dollars are invested in what are essentially clones of existing "social" tools that while promising to connect us actually manage to isolate us, and that the whole concept of "value" seems a bit screwed when you focus on these examples
Oops! Sorry, I thought the article was "worst part about being a Software Engineer". Best bits?
- I get to browse HN from my desk while my code is compiling
Referenced from this article.
That means I get to not only work with bright developers but other bright people doing other jobs, learn about their jobs, help make their jobs easier and then move on to another area. Very few jobs offer you the ability to regularly switch the area you work in. It used to be claimed that a good manager could manage anything, I'd suggest that a good developer can design software for (almost) any industry.
1) Iteration: We get to practice our stuff on real entities (language, OS, databases, etc). Do architects get to "practice" actual work at their home? Do new doctors get to try experimental surgeries? Do amateur civil engineers get to build those iconic bridges? They can do computer simulation ... but it is actually a software.
2) Hackathon: Can't imagine this happening in say medical field, mechanical engineering, law etc. Software Industry is one of few industries where this can be done.
3) Changing the world quietly: Many in my relatives are not programmers. It is hard to explain to them in what ways software is changing the world.
4) Open source: Imagine Coca Cola sharing its secret recipe. It won't but we as SE get to learn from open source projects. Now there is a cultural aspect to this but the point is that we as SE can experience it more than other professions.
2) What's the medical / engineering / legal equivalent of a hackathon that those professions aren't doing? Doctors and lawyers can always choose an interesting or deserving client (possibly pro bono), or do a research project.
3) If it's hard to explain, is it possible software isn't changing the world all that much?
4) Imagine Google sharing its Search code. It won't, but as lawyers get to learn from the best lawyers in any area of the law by reading their briefs and watching their trials (all public).
apart from few very specialized areas, you can do harm with bug but not harm/kill anybody. and we all do bugs, don't we
I'd still say that more bugs can kill people than you would expect. Many seemingly harmless bugs can be used (maybe chained together) to extract personal information out of systems, which is then used to prosecute people, or to justify putting them on a death list.
> and we all do bugs, don't we
Working at MacDonalds for 1 month must be awfull
None of those things make up for the giant differential in income, and predictability of hours though. And McDonalds does lack the occasional super interesting problem you get in IT - but day to day the actual job wasn't a lot worse.
But I don't believe myself to be above any job.
Thinking about the good and what to be grateful for sounds like a much better recipe for happiness than things like the share-my-salary movement. (I'm not opposed to the latter. It may result in modest comp bumps but I doubt it leads to lasting happiness bumps).
Think about the scope problem. You never have enough resources to achieve all the goals the customer/boss/group of people who only go from meeting to meeting wants. Yet by asking smart questions you can actually figure out what is most important to them (even if they don't know) and then decide based on what you want, what they want and what your team wants the best path to go on.
And then some of your devs try to be smart and also reprioritize based on what they think. But for some reason that's making it more fun not less. A reasonably smart dev is a much better stubborn goat than a compiler who doesn't want to understand your code, because he gets stubborn on much more reasonable ground and sometimes surprises you by being a lot smarter than you are.
It depress me ;-)
"even better" is a gross understatement.
If you're in the top 20% of the US by annual family income, you're literally making more than 99.9% of the world.
I have thought of going back to my old job as web-developer, doing cool stuff with Node, Angular and all the cool cutting-edge technology. But I'll only earn a median income if I do that.
Or go straight into management and earn 2 to 2.5 times median. But that seems even more boring.
You could earn twice a programmer's salary.
I don't believe that we change the world, or that we contribute to society any more than the person working behind the counter at a fast food join, the janitor, or other jobs that are so frequently devalued compared to ours. I believe that my job is far less valuable than someone doing social work or a nurse, for instance.
I wish more people understood this concept. I'd even go as far to say it has nothing to do with "somebody smarter than me." Certainly there are people out there not as smart as I who make more and have nicer things. But don't dwell on such comparisons. If you are happy with what you have, that is what matters.
Same cannot be said for other professions like Civil Engineering, Doctors etc.
The most interesting/best part of software engineering for me is that you can work across problem spaces fairly easily. (Of course specialization helps in remuneration.)
There's nothing I like more about this business, than to get code working on a new piece of gear.
It just keeps coming and coming. So fun!
I work in a web-based e-commerce outfit with 30+ other SEs who are all really into their work, smart, and committed to doing the Right Thing. This is a good gig.
If I was working on a COBOL app on a mainframe where all the documentation was in German - and I was offered the chance to interview for that gig just a year ago - I doubt I would have as much fun.
As a Ruby/Go/Rust/Python type of developer, I suspect - but can't be certain - my days are more fun than a Java developers. They all seem miserable, anyway.
I don't wear a tie. I don't wear a suit. Nobody cares if I'm a few minutes late in as long as I make stand-up. Nobody cares if I work from home if I feel like it as long as I make core meetings in person.
Would I get that writing J2EE code for a large corporate? Probably not.
Would the people who enjoy those environments enjoy working in a startup? Or a games dev house? Or where I work? Probably not.
I think the best thing about a Software Engineer is we kind find places that fit us culturally more easily than many other industries: medicine, law, most heavy industry, etc. all have a very strong culture that absorbs almost all players in that field.
I see this sentiment a lot. What is HN's aversion to showing up to work on time?
There are offices that have legitimate reasons for requiring employees to be there at certain times. I've worked in secured locations that were all but inaccessible at 6:01 pm and you needed a good reason to be there after 5. In an environment like that, you can't stroll in at 10:30 because you prefer to sleep in.
A lot of folks on HN seem to have this idea that as long as you show up it shouldn't matter what time you get there, how long your lunch is, when you leave, or how many hours you are working vs. sitting on Facebook, and there should be this pure meritocratic judgment based solely on the quality of your work. Maybe that's ideal, but it's 100% unrealistic. In an office environment, showing up on time, not leaving early, and not taking a two hour lunch should pretty much be the minimum.
For me, it's a necessity. I have fairly severe circadian rhythm problems and getting to work earlier is asking me to be unproductive, depressed and tired.
Also I don't have to worry about money.
Also, making mad bucks while sitting at home.