I wonder if OP may be confusing the technical environment (PHP) with the user environment (boring apps).
I think you can work on really cool stuff in any platform.
Similarly, you can also work on mind-numbingly boring stuff in any platform.
Perhaps he should just try to find something cool to work on (something that really turns him on), without regard to technology, and then just learn that technology in order to work on in.
It's not about which hammer or screwdriver you use.
It's about satisfying those who will live in the thing you build.
While it's possible to have a very cool and challenging PHP project, most of the work you get paid for is glorified HTML forms. What I do to fight the boredom is build my own framework. Over 2-3 projects I've gotten to something that is close to Rails in functionality (tailored to my taste, of course).
What I do to fight the boredom is build my own framework.
Excellent idea. I have done this myself several times.
My dilemma: At what point do you realize that your code is so cool that you don't want to develop it on someone else's machine (and dime)? I often find myself saying, "This is WAY more than they're paying for and will be worthless to me since they will own it."
To the parent: This where I've been. I've built many of my own tools and frameworks. Problem is, they're still related to the space that I no longer enjoy being employed in. It was fun work, with plenty of great challenges, and proved to be a great strategy for securing most of my sanity. Elevate anything to a "higher purpose" and you'll find some extra motivation to get the job done.
To edw519: This where I'm going (in addition to looking for another line of work I might enjoy more). I've been making my own tools for about three years. I guess that's my "breaking point". I'm using them personally, but I don't want to be at shops without some kickass tools and practices already in place. I like my tools, but working at a place without any useful abstractions is no fun. In the meantime, I'm trying to make the best use of my tools and talents on my own dime, for my company (http://greaterscope.com). There I can solve the problems I want to solve, without restrictions (until I get customers). Hopefully it'll be a much better ride and I won't post another similar thing in another five years.
Being a hack to make a living sucks, but hey - everybody has to pay the bills. So there's no need to apologize or feel ashamed.
If you find yourself bored silly with your programming gig, do yourself and other people a favor. Get involved in an open source project you like and feel you can make a contribution to. You'll probably start to enjoy programming again, and other people will benefit too.
Regarding interesting open source projects, can anyone recommend an open source project that contributing to would teach me about real-life, effective usage of:
(1). git source control
(2). maintaining a medium sized/complexity Java project
I'm interested in the oral tradition i.e. the human operational aspects of how you use it, what aspect to use it in what circumstances etc, etc, etc - that aren't in the tool itself or its man pages or tutorials. Thanks for any pointers.
Whatever it is, start small. Smaller patches can be very useful and are also more likely to give you the satisfaction of being accepted. Even just correcting typos or grammar in a README can be useful as long as you're not a jerk about how you submit it to the original author. :-)
Github definitely makes contributing to open source very easy, so I'd recommend you start looking there. They also have some well-written practical guides to working with Git here:
I might be a bit ashamed ... it's a big shock to find yourself on the path to nowhere when you feel you have so much more potential, hence the article.
I'm definitely on the lookout for something I might like more.
Don't feel like you have to do crazy low level stuff to be a good programmer. It's a big, diverse field and you can leave your mark wherever you want, and still have it be valued by others. Work on what gets you excited and makes you want to work hard, whether that's websites in PHP or a math library in assembly. You'll do your best work that way. And if you're good at your niche, you'll probably be able to find work doing what you love.
I'm naive, but isn't doing something over and over again always a sign that you're doing it wrong? Even if you have to work in PHP and write simple database table management screens all day long, there's nothing to stop you from stepping back a layer, for example by writing programs to write that PHP and MySQL code in whatever language you choose. I believe that if a problem really is trivial in programming, there's always a way to make it trivial.
Not all boring work is amenable to automation. Nobody has made a robot that can sew clothes, for example.
OTOH, I find myself still enjoying web/database programming in Scheme, despite having done it for 9 years now. I guess it helps to be able to focus on solving users' problems and not waste time wrestling with inappropriate tools.
I agree in principle, but at some point you're done with don't-repeat-yourself framework wizardry and you're up against the basic task of translating fragmentary verbal requirements into a technical solution. Web frameworks (sometimes) make that process more productive but no less boring.
That's true, but I think we can both agree that the author can do a lot better than spending 60% of his time to "copy-and-paste chunk of code, then tweak for new field names, then make sure to update the correct database fields, add validation, ad nauseum."
This is a great idea - there's nothing wrong with neither PHP nor web development, but it's great idea to broaden your horizon.
First add another dynamic language to your tool-set: Perl or Python, preferably. This will be an easy transition and you will have a great degree of jobs open to you. There are dynamic language related jobs which aren't web-development: bioinformatics, data mining, toolsmith positions (build/release, qa, operations), platform engineering (creating custom OS images). Some of them may require domain specific knowledge for the more senior positions but would be willing to take on a strong coder on to a more junior position on the premises that you'd be able to pick up the knowledge and grow into a more senior role.
These positions will often either themselves involve projects in other languages (Java, C/C++) that you'd be able to pick up on the job or be in a larger engineering organization where you will be able to transition to these jobs.
And in all these cases your experience as a web developer will be appreciated and considered important.
I did the same transition myself: systems administration (involved in some internal web app development, lot of Perl scripting)-> undergrad (and becoming bored with systems administration after learning algorithms, operating systems, compilers, etc...) -> operations engineering (lot of tools development) -> Perl/C++/Java development. (At the mean time I've been working part-time on a Masters in Computer Engineering which is opening newer domain specific knowledge to me).
I'd recommend doing a startup and/or side project involving interesting functions of massive datasets.
Technology-wise, at least consider...
- learning SML or OCaml or Erlang
- learning Python
- going deeper into Python. It's a fantastic way to express oneself. It beautifully offers (generators, coroutines, multithreading, subprocesses, and networking) for piping and distributing your computation, a flexible blend of functional and imperative, and its syntax is the most conducive to elegance, simplicity, and rereadability of anything I've tried.
...then building the core algorithms in C/C++ with SWIG wrappers, the tip of the iceberg with Django, and everything else in pure Python.
A must-read: "Generator Tricks For Systems Programmers"
Most of the the side-projects I started were definitely interesting to me in some way. They were a way for me to explore how something could be made easier, how it should be done, and how it could help me get more done.
For my company/startup (http://greaterscope.com) I'm also building online storefront software, which has plenty of interesting problems. It can involve massive datasets (for me), clever algorithms, etc. It has been the perfect opportunity for me to harden and field-test my tools. This is written in PHP, because it's the language I know best, and I feel like the problem isn't "solved" for PHP yet.
But those are beside the point because I've started to think more about "what I really want to do" and how to "not get stuck doing something I don't want to do". So I defintely feel the need to find something I like doing even more than storefront software in PHP.
Thanks for the technology recommendations. Python is high on my list at the moment. I'm on the lookout.
I'd also add that, in my experience, web app development Python and Ruby can (a) get interesting, and (b) provide a good segue into other development. Most Rails and Django developers that I know make well over $30/hour (3-4 times that, typically), work on interesting projects, and work on things other than just web apps.
Find a niche which is new - so no one has years of experience doing it - and appealing enough that there's a strong demand for skilled coders. Right now, iPhone and Android are two examples of such fields, there's probably some more.
Build a small app in it, and put it online for people to download. This will both teach you the skills and show you can produce results. That should be enough - no one will care about your experience/education/etc if you can show past work in an in-demand field.
"I can’t stand having 60% of the work day tied up with: copy-and-paste chunk of code, then tweak for new field names, then make sure to update the correct database fields, add validation, ad nauseum."
no wonder with that approach (copy paste, field names, etc) ... one will get bored
a good approach is "do without"
how do i write better, simpler code w/o copy paste
how do i eliminate using field names (i don't know in php, but maybe use list and map ... nullify the need for temp variables)
maybe do w/o database? maybe use in memory persistence, load once, write every time?
how about javascript validation instead of php equivalent? better user experience
how about cutting the 100 loc (peppered with temp var, fn, loops and other nasties) to 5 loc (say using map, apply, lambda, closure -- again, i don't use php)
i do notice that codebase that has limits (like can't be > 1000 loc) is usually better than the no-limits equivalent
"do without" will force u to think and it's more fun because your code won't be similar to others' boilerplate
the code probably won't be 'best industry practice' aka code that coworkers/employers will appreciate; however, the beauty of your own code can only be enjoyed by you only ... and i think that itself is a great reward
but of course u can't hide from responsibility when the code breaks, otherwise one can always blame the copy-paste or legacy codes -- anyway holding the responsibility alone is a priviledge, not liability
Pft. Web development involves solving a very different set of problems, but it's no less a profession. Web development is more concerned with usability and business needs than desktop development, so while the code challenges are less extreme, you often are working under the watch of far more direct users. Information architecture is also more of a focus in web applications.
PHP isn't like nationalism - you aren't unpatriotic to criticize. If you are enlightened, all languages must have either some utility, or some feature that teaches you something. Keep exploring.
Also, I dealt with this by getting _deeper_ into PHP by seeing what made it tick - writing C/C++ extensions for PHP. Not super fun, but helped me understand the value of Python/SWIG.
What you want to do is game development. Preferentially for mobile devices, aka iPhone and Android.
Game development can involve all fields of computer science and software engineering, in addition to a considerable amount of Physics, Mathematics, Design, Music and Story Telling. There's nothing more complete and fun than it.
Interesting I should read this today. I saw an ad for a job I wanted back in early September. I wasn't qualified for it that I could tell from the ad. I applied anyway and went through the interview process. I didn't know exactly why I wanted the job until I was close to actually getting an offer. I figured out I was just bored doing web development. I was already 3 months on a job I had just taken, doing .NET, PHP and web dev using a variety of CMS's. I did it for three months and I realized I just didn't enjoy it anymore. I started doing web dev back in 1999-ish and that's all I know in real world experience.
But this new company took a chance on me. If I can keep up, I'll have that low-level C++ programming experience I have always wanted, including multithreaded stuff.
My intense interest registered and my new employer decided to take a chance on me. Of course, there is more to the story. Such as, I had spent significant time learning C++ on my own and had code to show for it. I'm also older and maybe people take me seriously :)
I have a feeling the top developers are going to all start getting bored with web dev soon. It stands to reason all these 20-somethings start branching out and discovering the underlying software that makes the web work and will want some of that action.
I'm just glad I'm ahead of the curve so I had little competition for this job. The wave will be behind me! Yay!
I think you can work on really cool stuff in any platform.
Similarly, you can also work on mind-numbingly boring stuff in any platform.
Perhaps he should just try to find something cool to work on (something that really turns him on), without regard to technology, and then just learn that technology in order to work on in.
It's not about which hammer or screwdriver you use.
It's about satisfying those who will live in the thing you build.