Ask Slashdot: Stepping Sideways Into Programming?
thundertron writes "I'm a 28-year-old, non-technical, UX-focused Product Manager at a startup. Overall I'm very happy with my work, but I'm endlessly frustrated that I'm not committing code. I love the few occasions where I commit some front-end code or put together a fairly sophisticated query, but if the onus were on me to put together an entire site my hands would be tied. I've thought about going back to school (or even taking time off from my career to take courses) in CS to immerse myself in programming. The flip side is that I know I won't want to do that forever — I won't want to be employed primarily as an engineer because I like too many other aspects of the business. My best option seems to be to dive into Ruby on Rails and just pick up what I can in my spare time. Perhaps others in the Slashdot community have some suggestions/recommendations?"
One of the most important aspects of a PM's job is objectivity. Once you're part of the team contributing code you'll face the difficulties of having to kill some of your own ideas or contributions. It's never easy to be on both sides of the line when your dealing with more than a few people on a project.
Go Python.
http://diveintopython.org/
Then if you feel you need more jump into Perl. With an understanding of those two languages you should be set to pick up (just about) any other languages easier.
Just my opinion.
The advice I give to everyone having trouble to get a 'whole project' running is to write a simple game. Like, say, something from Spectrum, or arkanoid, or a zombie pwning game. Nearly everyone started on it, it covers a pretty large amount of problems to solve, and it's fun to do.
You say you are non-technical. If so, then you should definitely go back to school.
Michael Hartl's Learn Rails by Example is probably the bets tutorial out there, but beware - it's about 270 pages long, but do the whole thing!
http://ruby.railstutorial.org/ruby-on-rails-tutorial-book
I would also recommend reading cover-to-cover David Black's book: Ruby for Rails (Manning). It's a great way to get introduced to the Ruby language.
All told, that should be about 2-3 months of exposure, enough for you to start. Or at least decide if it's what you want to do.
CS is mostly abstract - algorithms, math, etc. you could get a good CS education without needing a computer. It's like the difference between medical school and being a doctor. If you want to be a better doctor then going back to med school wont' make any difference.
Hope this helps. Good luck!
-- Flame me and I will happily flame you back. Bring it!
Seems like a step backwards in the food chain... Most coders would love to get to any manager status.
I highly recommend this course. It's from stanford and has all the lectures online. It teaches you how to think about programming.
http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111
At my previous job, we had a CSR that we found had an aptitude for testing. So we made him a tester. He soon started to feel like you do: that he wanted to be coding.
He started learning to code on his own time, in the language we were using at work. He found someone in an IRC chatroom that needed some coding done in that language, and he helped them. A couple times. And a few other people.
And most importantly, he told the other programmers he was doing this. We cheered him on, and we told the bosses. He was eventually tried in-house as a programmer, and turned out to have a good aptitude for it.
In just a few years, he was just one of the team and not 'the guy that came from CS, can you believe it?'.
In short, start learning and using the language on your own time, and tell people at work about it.
"If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you." - DM
You learn to program best/fastest if you are actually working on some kind of useful project. On the other hand, if you try too much at once, you will surely break something.
Try learning to program in tiny bits and test frequently. In my case, testing can be as often as every ten minutes. Testing time almost always exceeds programming time.
The other thing is learning to work with other people's code. Almost no useful programs are coded once and left as they are. Code is almost always worked on by several programmers over the years.
You don't learn a natural language (like Chinese for instance) by trying to write a novel. You shouldn't try to learn programming by trying to write something huge.
http://agilesoftwaredevelopment.com/baby-steps
Your options are perhaps limitless. I would suggest that before you decide on anything, ask yourself this one simple question: do you like solving tricky problems... brainteasers.. jigsaw puzzles? Programming is a lot like all of these activities combined and "on steroids."
If you think that you like these then learn Javascript. There are some excellent O'Reilly books on the topic and try doing the fun stuff like drawing graphics in HTML5. By the time you've done something fun, you've learned a ton of the language. Once you have these basic concepts down like functions, variables, structure, and reuse, then you are ready for formal training.
Do not go back to school until you have at least established that you like this sort of thing, that you can be good at it, and that it can compliment your career (or at least make a fun hobby). It'll just waste your money and your time and speaking as a former University professor, it is disheartening to see a student struggle who simply doesn't have the aptitude or interest.
Do it. Try writing a plug-in for some bigger application, it'll familiarize you with the bigger picture (how things interact) and give you hands-on experience.
Everyone who designs wants to develop. Those who normally wish to develop, later find some hidden thirst for art. Those who get married wish they didn't a year later and those who have a car usually decide they need a truck.
It's the human factor. It has nothing to do about some technical desire and if you can find a way to balance these weights of desire, you'll find the key of living an acceptable life.
Try designing tests and in general, doing more requirements engineering. You have already have a useful background with UX focused work, with some reading possibly required. Seeing how the system provides and fills customer requirements leading to the payment of the billable hours can be a highly satisfying feeling.
Stay in management roles.
So, you like to program every once in a while. Doing it full time is completely different: more pressure, having to come up with solutions in others time frame, etc .... keep it as an avocation if you still want to enjoy it.
Secondly, at least for now, management positions aren't being off-shored.
Thirdly, you'll have a longer career as a PM and in management. 28? As a coder (Software Engineer - whatever), you'd have 12 more years before your taken out back and shot.
Forth, to quote Erma Bombeck - "the grass is always greener over the septic tank." Coding is the septic tank.
Fifth, if you really really really love to code that much, get therapy and get on some meds.
I'm a purely UX (user experience) person who, previously, has coded up solutions (we're talking old server side scripting) and hand coded more than a few sites. These days I occasionally do private projects so I can understand the technology, mostly so I can ensure I can negotiate with those who have to build what I scope out and ensure any compromise between the ideal user experience and the practical time available to the developers is optimised and balanced . What I make sure I don't do is put on my engineering hat whilst designing the functionality as creating a good User Experience should be about the business and user needs first before worrying about the technical limitations - that can be worked out later. With a good engineering team the answers is always yes, given enough time and money! I also see the same thing applying partly to visual design as well - I could do visual design but it is also best to separate from the core UX work as it's closer to implementation than the functionality design a UX person does.I prefer to let those who excel at these things do their stuff rather than trying to be a jack of all trades on the projects I get paid to do.
you could be making $150,000 a year, live in a mansion, have 8 cars. Obama just said we have a 'shortage of engineers'!
apparently, we have had a shortage since about 1998. god knows how we don't just collapse in a heap of rubble.
A: "I want to be a programmer!!!!11!"
B: "What do you wan't to code?"
A: "I don't know... YOU tell me..."
B: "Stop wasting my time. You don't have it in you."
Pretty much every good(!) programmer had a motivation bigger than just wanting to be a programmer.
People who want to be a programmer just to be a programmer waste their and other peoples time.
That problem solving skill is critical to programming, which, at a high level, may not involve committing code.Even before writing any machine readable code, there is a great deal of design work to be done. Understanding the problem, building prototypes, decided if those prototypes are suitable given available resources. For instance, depending on the language one uses the design in going to be different. A couple years ago I had the experience, in a class for high school students, watching a recent computer science grad trying to implement a program in Robo Pro, which has no variables. Watching him trying to fit the tools to the his solution, rather than the other way around, really made me realize why senior managers were needed to help the new programmer.
So this is what I would say. Programmers and codes are now widely available. If one wants to get a CS degreee and become a software developer that is great. One can look at the states of software and hardware and know that we always need more good engineers that can create excellent products. You may already be there. Short of this there is benifits to knowing the languages and processes your programmers are using, not becuase you are going to contribute code, but because you then know what kind of requests and requiments are appropriate given the constraints that are being made by the language and processes. For instance Ruby on Rails is very high level language, and as such imposes many more constraints to how a web site is developed than if that website were developed in lower level interpreted language, like say forth. We deal with the constraints due to the overall effeciency of the development process.
So I would not sweat the contributing code. No would I micromanage process. What I would do is learn the tools that are being used. To do this you will have to design and write code. But maybe make it your own personal project.
"She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
Why not look into contributing to an Open Source solution in your chosen area? see if you can find (for example) some PM tools that almost are good enough, and make them better?
-=DaveHowe=-
Maybe you want to schedule 1-2 code reviews per week and participate in them first, just observing how the developers do it?
Start from there, then you'll be in better position to judge whether this is something you are really interested in.
You can't handle the truth.
I've done exactly what the OP is suggesting, moving from a more (in my case) marketing-management role into a programming one. For years I had known that I wanted to do some programming, I had taken classes, I had made hello worlds here and there, I built some websites. Built many many servers. Eventually I decided to quit my job and go freelance, thinking that would help, but within a few months I discovered that programming was going to be the thing for me.
What happened? Well, I launched my business and I started "web designing" and ran into every trap associated with that along the way. No longer did I have a crack team of design pros, project managers, directors, etc. to back me up. When it came time to present my work I always felt nervous even if I had done a stunning job with something. In those circumstances I can talk circles around any code I've written but I could care less to defend a really beautiful design (to me it "just works"). So over time I began taking more and more complex jobs, first with a bit of custom programming, then a bit more, and now a lot. After a couple years of doing this I finally feel confident calling myself a programmer.
Going freelance probably is not the best route to go to make this transition. I looked at it as though I was getting paid to go back to school, just getting paid a lot less. Over time I have climbed back up the ladder and now get paid about the same but probably more (the upward trend is great). This is a key point: you are starting over. If you manage to negotiate anything but a starter wage you're really being hired as a management guru again and that is hard thing to shake.
Somehow you will end up climbing the ladder just like everyone else... so dive in. I think you're already on the right track to do a bit of css theming. Now try php or ruby templates. Then really dig into your API docs and run like crazy. Take on "easy" coding tasks like adding/removing things from display and then work your way up to handling froms and user data (and the security issues that come with it). Stay up all night coding if that's your thing. It certainly works for me.
I would not suggest sacrificing salary earning years for a temporary career change, which is what I see as the summary of the situation. To do anything for an entire career and be happy requires that your are extremely passionate and interested in the field. I am not sensing that sort of level of interest, and that the priorities here are to be winding up doing something other than engineering in the long term.
I can understand feeling bad about not being able to contribute a certain way in your current environment, but everyone is limited in the things they can contribute in some way. It is a bit of the maturing process to be able to settle for not being able to do everything (as much as many of us would like to).
If the desire to program is deeper than I am giving credit for here and you are willing to sink significant time into, I suggest viewing the language/programming environment as the tool, and the problem as the focus. If your goal is to set out to "learn ruby-on-rails", you'll not get much out of it. If you goal is to solve a particular problem, and you happen to choose ruby-on-rails as the way to realize the solution, that is the way to learn something the most important skills you need as a programmer (and what will be relevant when the technology trend-du-jour changes).
There's all the resources you need on-line at your fingertips to learn as much about programming as you want, so it is all a matter of how much you are willing to sacrifice your free time and energy to dive into it.
One last tip: If you focus on real problems that interest you and not academic exercises, you will learn the important skills faster.
Going to a CS department with the expectation of learning how to be a commercial code jockey is not an optimal strategy. Perhaps this is off-topic, but I'll try to keep it brief and focussed. One recent poster wanted to take a CS degree to become a better coder, but wanted to skip the gen ed requirements that four year degrees have, and this poster also suggests that taking CS courses will help him be a better coder. The thing is, CS is not about coding. It's about investigating the nature of computability and developing models and the mathematical tools capable of describing the models in rigorous ways so that they can be analyzed. You already have to be a good coder if you want to do CS, and if you aren't, you need to take programming courses which are usually found in engineering or MIS departments, not in CS departments.
It's just that having the degree doesn't set you too far ahead of the pack in this economy. While you're studying others are sharpening their resume in small jobs till their skills harden to the point that nobody even asks for proof of a degree when they see a years worth of related bullet points.
I'm in a similar situation to yours career-wise. Started working tech support around age 17 and since then only desktop support gigs have been offered. This summer, I finally stopped getting typecasted, thanks in part to a remote Unix server operations support gig that somehow left some programming-relevant buzzwords in my resume that I could actually prove semi-daily use of. Without the shell experience gained there, I wouldn't be working with front-end code. I'm at a small company and still transitioning, since the assignment is a short paid internship. My resume will finally say that I've done development full-time, rather than call-center or user-facing jobs.
My first suggestion to you is to re-check yesterday's discussion , which was a refreshingly civil rehash of "CS degree isn't programming, yada, yada." Make sure you scale it to >120 comments to get the most detail out of it; just take a break every half an hour to think how the comments apply to you and give it a couple days to review the whole thing seriously. Even to IT insiders, it seems that a CS degree isn't understood --I reluctanctly got one, and somewhat wish I had taken a 2 year degree at a tradeschool approach instead of being forced to plough all the way thru advanced Calculus, Math theory and a bunch of "core" humanities classes. At our age you are well rounded as you'll get and your skills will not really benefit from the degree's forced requirements... unless you quit your job to go fulltime into the 4 CS year degree. Only around half of CS classes are coding, so your job might actually be providing you with more hands-on experience with a single project than you get out of public colleges' degree programs for a whole semester.
Anyways, since you are already writing SOME code and queries towards your company's codebase and bottomline, then you don't need a full 4-year CS degree if you're looking for future jobs at mid-size and small places --the resume's degree blurb is to secure your FIRST programming job, which you indirectly are already in.
So, try to learn the languages and environments on your own (time is hard to find, but force yourself to do little things like regularly trying out examples at code-snippet blogs.) It's very important that you regularly use one or two big IDE's (Eclipse, Visual whatever) and vi / emacs for shells scripts, php and xml. Get familiar with CVS and Maven for code repositories; try out tutorials on youtube to see how they work, and force yourself to default to an Ubuntu 10.04 boot so that you have a shell handy, a compiler and are only apt-get away from Eclipse and other things. If you can live daily with tools that the other devs have, then you're a step closer to slowly push your way... oh, and since you're not a coder at the current company, you'll probably not be given a chance there --ever. A jump away might be the only way; chicken and the egg, really. It takes a good bullet point or two in your resume about "experience with X" programming skills that a junior position for a full-time programmer will appreciate. And without temp agencies, it's hard to kinda make the jump, so it can take you years to get a lucky break.
Sure, go home, crack open a book on programming and sip a cold one. Do some chapter projects, get to know a bit everyday and you'll learn a lot. Start with other peoples samples and learn how to improve or change parts to do what you want.
But unless your truly devoted you won't be part of the code staff anytime before your project is done. At the very least you'll gain an understanding of how it works and what causes delays.
Some people are pretty amazing... there was a kid who learned C coding and submitted his first Linux patch within 6 months of touching a computer for the first time. But chances are that you don't have 8,000 hours time and a rabid passion to devote to get to that level of understanding.
I said no... but I missed and it came out yes.
MIT Open Courseware offers (for free) CS, including video lectures, assignments, exams etc. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/video-lectures/
The US IT career field is getting offshored, and inshored, to death. The few jobs that cannot be offshored, and being given to visa workers, as US workers train their H1B replacements.
Please see the hdnet, Dan Rather report: "No Thanks for Everything." I think they took it off youtube, but you can still get it from iTunes.
Ultimately, you can either be a PM or a developer. I agree with other comments, that trying to be both simultaneously invites failure. That said, it seems like most careers in I.T. involve "stepping sideways" into something along the way.
I'm more accustomed to seeing this flow in the opposite direction... people who start off as developers, yet later in their careers step into management, hands-off architecture, pre-sales support, etc. However, there's no reason why you can't flow the other way. You would have a hard time being taken seriously at something truly hardcore, like development of compilers, kernels, or large enterprise back-end systems. However, who are we kidding... **most** of the JavaScript coders I've ever met were HTML designers who gradually stepped into development, and a ton of PHP or Ruby guys just kinda stumbled into it with no Computer Science background at all.
However, if you want that career path... you ARE going to have to "shit or get off the pot", and say farewell to being a PM (at least in the sense that most people use that job title). A true PM stays the hell out of the codebase, although you can pitch yourself as having "team lead" experience if you want to leverage that background. As far as making the transition, do the same thing any other entry-level programmer would do. Pick up a degree in the evenings, or maybe some certifications (they can matter a little bit at the entry-level). Dive into an open source project, so you have some resume code floating out there. Make your company aware that you want this transition, and be prepared for the fact that you likely will need to change companies for it to really stick.
Also be aware that you may be talking about a pay cut at first, because you're going from being an experienced PM to an entry-level coder. However, senior coders make more money than PM's... so you can be better off in the long run as far as that goes.
Good luck.
I always thought "Whys Poignant Guide To Ruby" Was the best guide for Ruby that ever existed:
http://www.cs.uni.edu/~wallingf/teaching/188-agile/ruby/whys-poignant-guide-to-ruby.pdf
Its free. Its awesome. Check it out!
At university you do not learn to program. You learn most likely one language at a very basic level so you can do your course work. Maybe you have to look at two, three or four languages. But in the end, programming or coding (as it is called by mathematicians) is an art, which can only be learned in a long process. That's why so many people are so lousy programmers. They come from university and they do not have the experience of a master or even bachelor in coding. They are computer scientists and if they did something useful during their studies they know how to understand the problems of a customer and transform that into a model of some kind, which is the basis for the stuff to be produced for the customer.
I personally would not go for Ruby as a business decision, because Ruby is good for 80% of any enterprise problem, but we all know that the last 20% are the really difficult ones. I worked on projects in PHP, C and Java during my career and currently everything goes in the direction of models and meta-models and the necessary transformations/compilers. Very promising in this area is Java as a target language, but we also look into Scala or even assembler like languages.
However, if you want to improve your skills in writing simple queries for very small (in a sense of not complicated) applications you could go for a scripting language like Ruby. But you do not need CS classes you need a good Ruby book and a lot of time for training an talking about good practice.
First of all, I have plenty of experience with managers who think they can code a complex website because they can write SQL queries. I say learn to get your hands dirty doing, but don't do it to get in the way of your engineers. Just learn to understand what their job is, don't try to do it. Now I think the key to writing good code is experience. School, websites, books, etc don't really teach what you should be doing to build and maintain a complex production site. While you can learn things like design patterns, the abstract knowledge isn't that helpful without diving in and knowing why to code that way based on your experience. You'll learn quickly that programming languages like Java aren't really that hard, per se. But coding a site requires a lot of other knowledge (CSS, database stuff, server stuff) and a lot of wisdom about what is good coding. That being said, there are a few things to learn to even be able to code for web environment. You need to know your front-end, which is HTML, CSS, Javascript. You need to know SQL. And then I suppose you'd need to know a language. Learn whatever language the site is in, I suppose. I say the best thing for you to do is maybe just concentrate on front end stuff, and make some mock-ups for your engineers. But in the end, you just have to learn what team work is about and not think you can know how to be a software engineer without actually doing it as your profession.
Democracy Now! - your daily, uncensored, corporate-free
Before anything else, answer a few questions seriously to yourself
-why do you believe you make a good coder?
-do you belief learning a specialization of coding will help you with the current task professionally or do you believe coding skills in general will make you more valuable for your employer?
-is there a timescale on your career where you see that a missing formal or informal qualification blocks you, and if so, when?
-Do you want job security, personal fun, or a payrise? (or all)
Please understand that "i am happy at my job and think about learning ruby for rails" does not qualify for me as a complete motivation to use time and energy for it.
Great another idiot who thinks he can just "pick up" programming and throw some god-awful code together. If it works, it's good, right? I pity the poor sob who's going to have to maintain your crap. Ruby, ugh. You and the Java dweebs. I wish you'd all go back to digging ditches.
Opa is a recently released open source technology that mixes together front-end and back-end code. See http://opalang.org/ Also, there are packages for MacOSX, which is probably your environment ;)
If you can try it, I'm really curious about how easy it is for a non-programmer to learn this kind of programming language.
My 20cents
Before you start learning a language think about in what area do you to work.
Engineering & High Performance Application: C then C++. (Maybe even some assembly language)
High performance i mean Audio plugins, Video and other stuff.
Ecommerce: PHP, Ajax for interactivity, HTML, CSS. (There is other languages like Ruby on rails but PHP has the most momentum here)
Browserbased applications: Javascript, HTML, CS
(Big growth area with Jnode being added to Windows 8....Javascript very underestimated language.)
Normal application development: Python
(Python is seeing alot of growth...For example of Python API is going to be added to Chrome)
The truth behind this is entirely dependent upon the school you choose. The CS degree does date back to a time period when most schools did not even own a single computer -- when computing itself was a theoretical science -- but the name endures as it it what people recognize. Certainly, there are an increasing number of Software Engineering and Computer Programming programs at schools, just as there are an increasing number of Information Technology and Computer Information Systems degrees. However, most schools still offer a Computer Science degree, and many still use that term as the one for programming.
The road to tyranny has always been paved with claims of necessity.
Got an app you always wanted to make? Start it now.
How about a website you always wanted to do?? Start it now... perhap THAT especially, & especially now and nowadays!
(See - the big thing now really, is online stuff. Every company HAS to have it, as it's called "the salesman that never sleeps" or offers online processing of data and money flow!)
Plus, think about it:
HTML5 just came out the door and even Microsoft's "biting"...
(E.G.-> Witness Windows 8, .NET being put on "the back burner" apparently vs. HTML5, Silverlight too)
Now - Odds are, You will have to spend money to MAKE money though.
That generally means equipment, education for training (optional but HELPS, @ least it does for me, saves time in mistakes (Data Structures was an excellent example for myself there @ least)), & perhaps even books, but the web nowadays? Almost as good as a "general purpose/catch all language book"...
Plus, today's programming tools today and methods? Hey - they truly are WORLD'S BETTER than when I started (early 90's) and the web makes it that much better too, along with (ugh gotta say it) Open SORES!
I.E.-> Perhaps some coursework @ a local colleage (go cheap as you can, courses are really what YOU put into them, and some of the professor, but more of your own effort).
Most of all, HOW BAD DO YOU WANT IT?
You can go this route.
I pretty much did in the early 1990's for PC Client-Server DB work & it paid off...
You have to start doing it, it will probably be "slow going" @ first though, always is, like riding a bike. You'll get it though...
E.G.-> I was there during the DOS -> Windows 16 bit transition & learned on 8088's (small school was why) & then once in the "real working world"?
It was ALL Windows (big change from tty terminal/console mode/DOS apps to GUI, but once you get it? Cake, & BETTER imo (for many things, mostly user friendliness)).
(Why go for DP work in MIS/IS/IT? Data Processing (what CIS/MIS degrees give you really) IS truly, the "steady-eddy" in the field of programming & often "segues" into webwork too!)
Simply because everyone's got DATA, but nobody manages or processes it the exact same as the next guy - thus, usually always work in it really & on MANY fronts!
The money today? It's not in apps...
(Well, it is in custom business apps, & always WILL be for MIS/IS/IT dept.'s)
BUT RATHER, imo, in DATA, & data of all kinds...
See... I did the route I am telling you, but in a MUCH DIFFERENT "ERA": The 1990's, pre-internet & gained that later via ASP.NET work on the job...
Now - Once you have the principles down & a good set of fundamentals, or if you came of some form of computer work or "power user" grade experience? It comes faster...
I.E./E.G.-> Languages, & learning new ones? Quicker... they're all PRETTY MUCH Object.Property Method approach nowadays & for decades now anyhow.
It's NOT about knowing a specific language though, or toolset/API - it's about PRINCIPLES & CONCEPTS! Say in C/C++ you know how to open/read-write/flush-close a file... you say, "I know what needs to be done in C++, now I just need the syntax in Pascal!" etc.
I did freeware/shareware to "keep abreast" of MORE & different style of coding & to know more... pays off!
Mostly to learn the Win16/Win32 API, the underpinnings of Windows itself, and yes, ven .NET, & inside out via diff. languages marshalling it.
It gave me a LOT more understanding of how things are done, how they work, and how to use them!
(Which saves you "in a pinch @ times" if say, a prebuilt control won't do it for you (which does save time since they're usually prebuilt code objects (better than headers for C/C++ really, more functionality, specific functionality for purposes AND since you paid for those, you got support too))).
You
He's probably first level support for some package
The main problem these days is that so-called "designers" are calling many of the shots, rather than actual software developers.
This is a pretty radical departure from the past few decades, where we've seen it mostly be the opposite situation. Software developers would make the decisions, but would occasionally enlist the help of graphics and UI designers to tweak the UI's appearance or for suggestions about improving the UI's usability.
These days, however, we're seeing the "designers" deciding how UIs, and even the software as a whole, are to behave, from beginning to end. The software developer is there to merely implement whatever the "designer" wants, without any ability or power to make decisions themselves.
The problem arises because software developers and "designers" have very different focuses. Software developers want to create applications that work well, and are effective to use, even if they might not be very pretty. "Designers" tend to only care about appearances, even if the application isn't very usable. And they only keep themselves relevant by changing, often needlessly, the appearance of the application or web site on a frequent basis.
This is exactly what we've seen from each organization and group that you mentioned. Apple, for example, was originally founded by software and hardware developers. Their operating system's UI didn't look horrible, but it was usable and that's why Apple systems became popular initially. After their rough patch, and the acquisition of NeXT's technology and talent, we saw them focused on providing high-end, high-quality software and hardware where usability was key. Then the iPod/iPhone/iPad situation arose, and the emphasis shifted more towards "design". Now more emphasis seems to be on making the software look "trendy" and "hip", rather than working well.
The same goes for Mozilla. We've seen nothing but one pathetic Firefox UI redesign after another from them lately. These unnecessary redesigns are only disruptive, and haven't been beneficial. Now the developers have been distracted for a long time making these changes, rather than fixing the performance problems or memory leaks that plague Firefox. Users suffer not only from the bad UI changes, but they also suffer from the lack of real progress when it comes to fixing these serious problems.
It's time for software developers to make the decisions, rather than "designers". The priorities and concerns of the software developers are much better aligned with those of the actual users. The applications may not look as pretty, but that's easily ignored if they work well.
Learning to programme should be completely trivial if you've got any talent.
Learning a whole eco-system of development tools which is what you'd need to do to hold down a serious job is a much bigger task of course.
A decent CS degree from a good school won't teach you how to code - they'll assume you know that pretty much as an entry requirement
How can you manage that which you don't understand (especially fully)? It's also all about how much effort he want to put in. Anything IS achievable IF you "live it" -> http://ask.slashdot.org/comments.pl?sid=2271446&cid=36577786 which, imo, IS the only way and only way to be an effective respected mgt. figure of coders, period. To be a leader, you have to lead by example too... and know your stuff, otherwise you don't get respect!
APK
P.S.=> I wish him luck because you can ask him yourself -> John Carmack (legendary, we all know it) said this:
"Sometimes? It's time to take that 'HARD RIGHT TURN' in your life to get to where you want to be" (not EXACT quote but close enough & he's done that with rocketry & done fairly well @ it no less... talk about a "hard right turn" from computer genius coder to "rocket scientist" type more or less!)
... apk
Ask yourself do you actually NEED to program. Does it put food on your table? Money in your IRA? If not, then keep your day job and play at home when you're bored. Since you are so close to programmers you may actually need to keep your programming skills sharp and develop new ones, just from a career point of view. At 28 trying to enter a field comprised of really smart, talented individuals, committted pissed off desperate programmers will do nothing but draw embarrassment and scorn unless you are a talented quick study or have a thick skin.
Ruby, and all of the surrounding technologies, were never about the programming. It was nothing but a marketing-induced fad.
Nothing about Ruby is unique or special. The language itself takes the worst of Perl, and then mixes in a broken understanding of Smalltalk, and tries to combine them in a way that just doesn't work well.
Nothing about Rails or the various other libraries and frameworks is unique or innovative in any way. All of those ideas had been expressed beforehand, usually first by the Perl community, and in some cases by the Python community. What's more, the Perl and Python approaches are often much better and easier to work with.
Ruby only became popular because Ruby and Rails were hyped, hyped, hyped and then hyped some more. If enough fools blather on about a given subject, it'll seem important or worthy, even when it obviously isn't to anyone who isn't an idiot.
it is great you want to learn code. I learned to code before I ever got to college and I do not believe it improved my abilities that much. Coding is one of those things that changes so often you have to re-learn anyway, so you may as well get used to self-teaching. If it is Ruby on Rails you are after I would recommend Rails for Zombies. http://railsforzombies.org/
It is a quick free and great way to get going in rails.
Right now, you like to code because you do a small amount of bounded coding, and it's fun to see your work producing benefits. But like so many other disciplines, the next step is the exact opposite.
If you graduate up to the next step of programming, you'll find that you spend an inordinate amount of time sweating details and in general frustration. By the time you work through a given task or project at this next level, you'll look back and not quite understand why it took you ten times longer than it used to take you to do only 10% more.
The rewards in programming come at the third level. The level where you go end-to-end on a task, project, or entire project. It's then that you discover that for the same amount of time as in the second stage, you can now get done an entire task or project, all by yourself, and it's really really cool.
If you're planning on sticking with it, or would be willing to do so if it winds up suiting you, then hey go for it. There are many great ways to pickup programming in any language. Just find someone to steer you past the six small things that any given language has as stumbling blocks. If you choose Perl, then talk to me. In two hours I can ensure that you skip the ten months of horror that most people go through with Perl, all because no one told them six subtle things -- like hidden variables, context-sensitive variables, the particulars of list context, and why, as a human being, you should always be using references.
But if you're planning to pickup programming only to get the rewards for a short while, like a year or two, then you are going to be sorely defeated. It can be dreadful, awful, and just plain rude.
I know what you're thinking. You're thinking that Ruby isn't Assembler, and it isn't C, and it isn't Basic. Ruby's designed to actually get things done, and moreso Ruby on Rails. So how could it possibly be so painful?
The question is the actual answer. Your house is easy to understand because you expect it to be a house. You expect your car to drive on the road, and hence your car is easy to drive. The world is quite different in things like PHP and Ruby on Rails and Perl, and programming in general.
The smaller lower level languages are really hard to learn, there's very little to learn, and you're left wandering in an open and endless field, with a pile of wood, hammer, and nails. You can build any house you want, but you'd better be an architect.
The larger, higher-lever languages are closer to frameworks. They are really easy to learn, there is a tonne to learn, and you're left in a reserved plot with a box of Ikea furniture and an allen key. You can easily build your house. But it's going to be that house, the way it is, and you get to hope that it fits into the plot, and that your couch isn't too big.
The world of hurt in programming is never the programming. It's in figuring out how your english intentions can possibly be translated into rational logic. After that, it's just syntax and typing, each of which is easy.
That's why you like it now. Your tasks haven't hit the threshold where understanding what you want is difficult. The second level thrusts that into your life with the sentence "I know what you want. But you've used two oxymorons in your description." When project demands conflict in logic, it can be arduous to talk them through until they don't.
When you learn to do that really well, that's when you graduate from level 2 to level 3, and life becomes beautiful, because you wind up with a skill that amounts not to programming at all, but to disecting business logic. It's really cool. And that's why good programmers can solve real-world problems with ease.
Your job (should be) to define requirements, manage the roadmap, talk to customers/prospects and prep the product marketing and sales functions. Coding is not part of your job. If you want it to be, then you need to re-think your career path. Not to say being a coder is bad, it's just that you cannot be both and be successful at it. Choose wisely.
Computer science is not programming. Computer science is not the same thing as software engineering.
If you just want to learn how to write simple programs or build simple e-commerce sites, don't waste your time going back to school.
A computer science degree will teach you to understand programming and understand computers. It sounds like you just want to learn how to build things.
However, if you want to build complex, reliable things, you should realize that this is not done through programming: it is done through design. I would recommend that you study some simulation languages, to develop a good feeling for concurrency issues, and that you learn some functional programming languages.
One advantage of being on the product / project management side is that you'll have more job security if you've got good people skills. It's very easy to offshore dev jobs, but much harder to offshore the product or project management roles.
If you really want to code, why not work on an app or open source dev project on the side? Keep your day job, but do something else on the weekends and evenings until you're sure that you want to make the switch and have the skills to carry it through.
Well.. if you can take some advice from a crusty old coder. After 20 years of coding I've recently swapped over to working as a product manager. As much as I miss coding for money I'm now finding new ways to code for pleasure. I code for my kids, I code for myself - and I no longer feel the pressure of having to produce code under crazy time constraints or the demands of managers with limited technical knowledge.
If you're coding as well as managing it's far too easy to get sucked into the code and forget your other duties. Or piss developers off by getting into their faces a bit too much. I've done both since starting as a PM and realise now that the best part of my job is building a bridge between the techie and non-techie worlds. And that's a joy.
I have a small project that I work on over the odd weekend, helping build services for parents of kids with autism. It's paid work but not much more than beer money - though being Australian that possibly means a lot. But it also feels like I'm contributing something meaningful. Maybe find something like that - something where you can practise your coding chops, have fun and do some good.
In your comment you said a number of things.
You said you are non-technical. Coding is all about mastering very particular technique.
You said you don't want to make it your career, which suggests you don't have a deep
interest in the hows and the whys of quality coding/software engineering.
So why not leave it to those who have either been doing it since the age of 14 or
who have a gift and a love for the craft and the science of it.
It sounds like you might do better at the other aspects of the business.
But anyway there are lots of lighter-weight options than a CS degree.
Try continuing education courses at a university or collage. Or a diploma program
at a college. Or as others have said, the MIT online courseware.
Where are we going and why are we in a handbasket?
I used to say the same (it's how I learned), but I'd generalize this a bit now... To learn programming you have to have something you want to accomplish by programming. It doesn't stick with you unless you're solving a real problem. That may be a game (and MUD coding was, for me, the most instructive, but it's a bit old-school now). It may be writing a plug-in for a blog/broswer/whatever; could be a facebook app; could be a website; could be anything that grabs you. It'll help if you find into a web community or project full of people doing the same things. If there's a book on the subject, and you're a book person, that'll be a good kickstart. Now that I hire programmers, nothing impresses me so much as a project that's entirely their own work, done for the love of it. This means they imagine, then plan, then self-start, then see it through. If _you_ really _want_ to code something, then do it.
Old School job start was by saying, "I wrote this really killer batch file!"
The rest is downhill from there. Along the way, you will experience "Stockholm Syndrome" with management (a different perspective now). You will flat-line when you finally understand the marketing department.
Have a great trip.
Here's what I do when I want to learn a new language that I've never used before:
1. Buy one of those "For Dummies" books on said language or perhaps "Teacher yourself XXXX programming in 24 hours" or whatever.
2. Blast through the book over a weekend. Don't get bogged down trying to memorize everything. Read it to get the basic concepts so you can build simple app from memory.
3. Decide on a small project and start coding it as best you can. I like to build a blackjack game personally. Write functions to select the card, track which cards have been played, allow the user to select number of decks, etc. This will be all text based in a terminal window. Once you've got the game working, add a GUI in whatever OS you are using. Start simple in 2D and just slap cards out there on the table. As you get time, learn to add card flipping animations and card playing sounds from your OS or downloaded from the internet.
As you build your project you will get stuck many times not knowing how to do something. Either buy a more advanced book to look through as you go or look to the internet for help. DON'T waste your time trying to read an advanced programming book. Just look things up as you need them. Once you've got a couple of smaller "just for fun" projects under your belt then you might want to actually read the whole book. You won't understand half of it until you bang out some code and get stuck forty or fifty times. Once you get the hang of the basics, you can breeze right through a complex book.
After learning to bang out code in a blackjack game or some other project, you might consider reading a couple of books about algorithms or good code design concepts. I've been doing this since I was 10 years old and I don't want to say it's been working for me for a long time, but let's just say I remember seeing the original Star Wars at the theater... to be more specific... at the drive-in theater.
After all there is more joy in heaven when one sinner repents... But seriously, as a manager you deal with people. They do what they want, and there is nothing you can do about that. Computers, on the other hand, are more amenable, and do what you want, but you have to ask nicely. But let's not kid ourselves, the only thing worth doing in this entire business is programming; anything else is a sideshow. So you want to make a contribution? Well, there has never been a better time to start. The world is full of open-source projects where the people who make things happen also let you know how they do it. Find something that you think is the mutt's nuts and whatever language it is written in, lean that, and take the time to understand how things really work. It will cost some time, for sure, but that's how it's done. It seems that you don't want to be limited in your understanding of what is required to get things working. This is a good attitude. The world is full of people who pull things out of their arses without having a clue. More power to your elbow, Sir.
There's are plenty of things that are great about Ruby on Rails, but I don't recommend *Rails* as a starting point. Without any background in programming, SQL, HTML, or JavaScript, there's a good chance you'll overwhelmed, or at least confused. RoR covers a LOT of ground. I think Ruby, Python, and Groovy would all be good languages to start with, but don't worry about picking "THE" technology yet or a full framework. Even if you do pick the "right" technology that you make into a career, there will be plenty else to learn, now and in the future.
Here's are some specific recommendations:
A) First, there is no need to quit your job yet. Consistently use some of your evenings and weekends to explore and learn. If you find out you don't like one of the technologies I've recommended, don't sweat it. It may not be for you, or it just might be the wrong time.
B) Try some programming, and see how you like the logic and puzzle-solving part of it. Here are two books I'd recommend to get started, in no particular order:
1) "Python Programming: An Introduction to Computer Science" (Second Edition) by John Zelle
2) "Why's (Poignant) Guide to Ruby" by _Why the Lucky Stiff - http://mislav.uniqpath.com/poignant-guide/
C) Try some web development and see how you like the design, layout, and organization of it. Start with the book "Head First HTML with CSS & XHTML" by Elisabeth Freeman & Eric Freeman. You'll learn HTML the new school way, where presentation and structure are separated (and the web is better off for it).
D) Try visiting some user groups for different technologies, like Ruby on Rails, Groovy on Grails, Java, Python, .NET, MySQL Adobe Flex, whatever. You'll get a feel for the culture while learning new things.
E) Once you finish the above, there are several directions you can take:
1) Want to program more? Sign up for a college class on programming. It doesn't matter whether it's C, Java, shell scripting, or whatever. Just take a class to continue developing your programming skills and develop an appreciation for the different aspects of the world of programming. And a class at a community or technical college can be perfect for this.
2) If you're continuing down the programming path, buy another book on Ruby, Python, or try something new like Java, JavaScript or PHP. If you want something more hardcore, check out "The Joy of C" by Lawrence Miller and Alexander Quilici.
3) If you continue progressing in programming, and/or if you really want to get into Ruby on Rails, Groovy on Grails, Spring, or any framework, you'll probably want to take a class on Intro to Databases or just pickup a book on SQL. If you liked Head First HTML book, then check out Head First SQL, and/or get the very concise "My SQL Crash Course" by Ben Forta. Knowing basic SQL and database essentials will make you better with Rails, Grails, Spring, or any framework. Or if you really like SQL and organizing things, database development and/or administration can become an entire career. And you may get into data mining or data ETL (over the years I've been exposed to Microsoft SQL Server, Sybase, MySQL, Oracle, Informatica, and lately to Microsoft SSIS).
F) If you've made it this far, you've probably picked your path, and possibly found a programming language you love. Your next steps may be one of the following:
1) Dive fully into Rails, Grails, Django, Spring, JSF, force.com, or another framework.
2) OR Learn more HTML, CSS, and JavaScript. Play with JQuery, Dojo, or another JavaScript library.
3) OR keep taking college courses, perhaps hardcore CS with Calculus, Physics. That's not the only route, but this will take you from good to great in programming. Don't overlook other options, including a BA in Computer Technology.
4) OR if you're not not digging hardcore programming, school, and/or you cr
"Programming" means different things to different people. If you just want to do UI stuff or web pages, a CS degree is overkill. CS is a branch of math, and the programing done in a CS curriculum is in languages designed to solve hard problems fast. If all you care about is UI stuff, scripting languages are more than you need. A CS degree will make you a good programmer, but you may find that knowledge of semaphores and category theory are not actually used for the problems you want to solve.
If you tell us what languages your team uses, we might be able to give better answers. For example, if your team codes in ruby or PHP, you don't need to learn about memory allocation or static typing. You would grow as a person from learning these things, but you will be disappointed to discover that they are not used in those languages.
If you want to learn just dive into it on your own time. Pick something simple to write like a todo list or a blog and just start. There is a great site called http://railscasts.com which has 200+ screencasts on Rails now. There like mini college classes covering many popular subjects and will help you get up to speed fast. Commit to watching 2 screencasts a day and in 6 months you will know more than you think. Also pick up a good intro to Rails book and read a chapter a day. Also get the intro to Ruby book. Again it wont take long, even as a non programming you will pick it up fast and both Ruby and the Rails framework are great tools to start out on. Not to plug to many sites but there is a nice multipart series on http://nettuts.com that covers everything from setting up rails to making a basic app. I think its 12 or 13 parts now and its a great intro resource out there (most of it is on the free side of their paywal as well).
The question I always ask people over about 18 when they ask me about becoming a programmer is: why aren't you one already? There may be a good answer, but I've not heard it, yet. There's nothing stopping you. Programming tools are free and the internet is chock full of free tutorials and books. There are also many great books you can read. The equipment isn't expensive. In fact, all the really good programmers I know (and many who are not so good) couldn't not be programmers. There is this irresistible pull. It's what we do in our spare time when we don't even have to do it. Keep in mind that's who you'll be competing against. So, why aren't you a programmer already?
Yes start programming. More experience is better. In fact from my point of view no non programmers should be in any management positions over programmers. It is true that to be a great programmer you need talent, just as in any other profession. But, programming is really simple. I teach it to 12 year old boy scouts for a merit badge. As you learn more programming you will be better at understanding the programmers who work on your project. But realize that programming on a commercial project can chew up more time of the other programmers than you save. New guys always do that. So be respectful, start on a side project, or better yet, write some automated unit tests to prove the correctness and increase the code coverage of one of your projects. Then you are writing real code, but a blunder will not put production code in jeopardy.
Writing software (Engineer) != Selling software (MBA) != Selling consulting (Sales Engineer)
Pick an option and become an expert.
If you "love what you do", but want to do something else, but don't want to do that something else forever, do it on your own time and make up your own site or something. You don't stop doing something you love doing for something you only want to do for a bit, except as a side job or hobby. Ask to get some more work on projects when you're not busy. Sure, go back to school or take some classes, education is always good.
Don't take this personally, but having a really hard time finding a job right now, I kinda want to slap you for complaining about a job that you love to do.
Vote monkeys into Congress. They are cheaper and more trustworthy.
Learn Perl. You won't regret it.
You don't really say what technologies you're working in (not familiar with 'UX', but from your mentioning Ruby, I would assume web and would thus recommend javascript. It has a C-like syntax, and is really the central technology of web applications. From there you could also go to php, which also has a C-like syntax. If you really get sucked into it, at some point you'll probably want to take some C for completeness. PERL also has a C-like syntax, with a lot of other quirkier elements. It is probably strongest for the stuff it does best, which does not include web apps.
Some above posters are right that you might not want to get directly involved in the nuts and bolts of your current projects. However, I think it is imperative that you either (A) learn to program some or (B) be willing to trust a lot of what your developers are telling you implicitly on faith. The best technical manager I have had knew how to program, and he was very smart, though ultimately, he could not ultimately allow himself to get into it much, I presume, because of his other duties, or, perhaps, because he was a bit of a chickenshit. Still, he knew what that stuff involves, which somehow (conscience?) seemed to block him from trying to bullshit or steamroller you too much.
Bukowski said it. I believe it. That settles it.
The internet was made by programmers, it is FILLED with information on programming, as any self-taught programmer will tell you.
Start at the wikipedia page for "computers" and read entirely through it, click every link for something you don't understand. If you need more information than wikipedia provides, use the external links and search google. If google can't answer your questions, try an online forum for programming.
The MIT scheme lectures with Ableson and Sussman will teach you a ton as well, and are free and open.
When you're ready for some challenge, I recommend project euler (just google it, it's not hard to find).
There is no better way to learn to program than trying it and learning as you go; CS coursework is all trivial and useless.
Make some barbecue or grill something with friends and trink beer and don't waste your time behind the screen ^^
Recipes for USA bankrupt - http://tinypaste.com/0d66f dd = dollar deluge (printed in the infinity)
The Good: designers are now in control of design and UX, meaning the product looks great. this is a boon to developers too, for when we show off our work nobody looks at the screen and says "i bet the code behind that is amazing." they judge your coding ability on how well the designer made it look (or more accurately, how close you rendered the designer's vision with your front-end code). this means users no longer have to click through 3 pages just to finally download that file. it means products tend to follow some kind of standard for things like dropdown lists of US states or calendar pickers for date ranges.
The Bad: designers are now in control of design and UX, meaning they will throw a "Login" text link here and there, completely disregarding what that actually means to a developer, the deadline and client expectations. or they might completely omit the use case for an unsuccessful form validation, leaving the developer in his former role of making shit up for UX. designers will do these things because they are not computer geeks, and have no comprehension that a "Login" link means designing a database, a user authentication system, password retrieval system, etc., or even how long that will take.
in the end you've just replaced one set of problems for another, and the only solution we're gonna come up with for the next few hundred years (who am i kidding, we are not going to last that long as a species) is to go back and forth between who has priority, designers or developers. god forbid anyone should cross train both fields (like myself). because design is not really so much about art production as it is about problem solving. at least, the good designers know this.
insensitive clod overlords obligatory xkcd car analogy russian reversals whoosh pedant fanbois ftfy in 3...2...1..PROFIT
You should be aiming to move on up to "Producer" and then "Executive Producer", etc positions.
In globalization and the flat world, MBA is a must to survive in the ecosystem.