views:

229

answers:

4

I have been working in web-development industry for over 7 years as a designer, tester, project manager, developer (in order of experience).

I already have a degree in linguistics, but now I am going for Master's in CS, 'cause I found it rather difficult to find a job in the industry without having a CS degree. However I do not want to pursue career of a coder. I am interested more in designing software, rather than coding it, but I still feel that to be competitive I need a solid foundation in coding.

My question is, how much do I need to know in order to be successful as a developer (in the broadest sense of the word)?

I guess as an extension to this question... what things do I need to know to be able to communicate with developers regardless of language, as well as what things I need to know to pick up new language or technology rather quickly?

Just a quick edit: I changed programmer to coder to make my question more accurate.

Conclusion: seems my question was not understood correctly. But that's ok, I got some useful stuff from this talk. What I really wanted to know is not how to become a programmer without writing any code, but how to get a foundation that will be sufficient to work with professional coders and develop great software, not telling them how to arrange their classes and methods, but leading them to see the big picture and contributing in a meaningful way.

A: 

I think the important thing is that you have to be able to communicate your idea of structure and dynamics in certain parts of any system. If you're not going to be much of a coder, I don't think it's necessary to be able to work through complex algorithms by yourself. That's just not relevant to what you want to do.

If you need to talk code, using Pseudo code is definitely your friend. It's easy to write, communicates a clear idea, and does not have strict syntax.

In the end, the structure and dynamics are the most important. You can scale your thought in terms of models if you need to.

Mike
I love people that accept the answer that says just what they want to hear. Why bother asking in the first place?
anon
Read Neil's answer instead. This one is nonsense.
WOPR
@Neil, you are a smart guy, but I do not think you got my question. I do not intend to be a coder. I think I stated it clearly. What I want to be is a developer, engineer, someone who talks to coders and gets ideas across, but does not dictate how this or that should be implemented.
Michael
BTW, I hit this answer by accident.
Michael
Neil, you make it seem like programming is a dark art; A fortress, incapable of entrance to those without many years of pain. Being an excellent programmer is a long road, no doubt. However, if you can't peel off the select skills that allow someone to interface with you in the work place, I seriously doubt that you can communicate your ideas to non-techies easily. It may not be what -you- want to hear, but we do have to work with none-programmers, somehow, someway. Not all of us have years to do that.
Mike
@Mike No, it's a completely open art, much like painting. But it does have to be practised if you are going to be any good at it. And as someone who has spent large amounts of his career managing programmers (and seeing others failing to do so), I can tell you that you have to be as near as competent to those you manage as possible. Of course, some will be better than you - those are the ones you want to hire. But you will both speak the same language. Michael seems to think he can escape learning that language.
anon
@Neil, makes sense. I suppose I aimed my post at the ability to communicate with programmers, not instruct them. Touche.
Mike
@Neil, I do not think I can escape learning the language. I just wonder how far I need to go, that is all.
Michael
+8  A: 

I don't often answer career questions, because I believe that they are basically off-topic here, but this scratches one of my itches:

There is no royal road to having a solid foundation in coding except for spending years writing code. Doing a CS degree won't do it, reading websites won't do it, asking questions here won't do it. You have to write the stuff.

And if you don't wan't to do that, go do something else - the world is wide.

anon
+1. Also the very succinct @mattbasta in comments "You need to know all of it". Love it.
WOPR
@WOPR, you know that it is impossible... expert coder knows only so much about the design, expert designer knows only so much about the code. Is it not so?
Michael
@Michael That's complete and utter bullsh*t. Believe me, I know more about both software design and coding than you do, and than you probably ever will. And there are people like (for example) Ken Thompson who are infinitely better at both than I am. You either don't understand software design, or you are a troll.
anon
@Neil, perhaps I don't. That's why I am here to learn, but your offensive comments did not help much so far.
Michael
@Michael Enough really is enough, Probably to your relief I won't be posting on this answer any further. But consider what I've said - I don't like seeing people going into careers for which they are obviously not suited.
anon
@Michael: IMHO, Neil's comments only appear offensive because they dash the aspirations that you set out in your post above. However, they are true. In order to be a good designer, you not only need to be able to code, you *need to be able to code better than most programmers*. Perhaps you might be better suited to project management, which is more suited to your stated goal (paraphrased, by my interpretation) "I want to help build software without actually knowing how to build it".
Ether
@Esther, this is the part that I wanted to define by my question: what do I need to know to be able to code better than most programmer?
Michael
@Michael: I think the implication is that you'll have to program alongside other programmers for a few years to find out. Essentially, if you're going to be dictating to people how to program, you better also know how to program. That seems to be the picture several people have in mind about your question. If you have a different picture in mind about becoming a technical designer (what some people call a program architect), maybe you should take some time and clarify that.
Merlyn Morgan-Graham
@Merlyn, my understanding is that coder and developer are not the same thing. I do not want to be a code monkey (no offense, I just want to get my point across), what I want to do is to work in a team to help develop (not code) software. Hope that explains my point a little bit..
Michael
@Michael: So, is the difference here that you want to be a developer/program architect, not someone who implements what developers/program architects design? If so, I think I get where you are coming from. In that case, you still have to code and learn to code - you just have to be your own code monkey, and eventually you will get to have other code monkeys under your command :) I think the area of confusion here was that I didn't understand if you wanted to program or not.
Merlyn Morgan-Graham
@Michael: Although you will need to get a base level of experience and understanding to not have to start out as a code monkey. Is avoiding the professional code monkey step (/dead end) the type of information you are looking for?
Merlyn Morgan-Graham
@Merlyn, no that is not what I am looking for. I am looking for advice on what areas I should focus first, so that I can get a good foundation in a shorter (for practical reasons) amount of time.
Michael
@Michael: Well, since everyone (myself included) and their dog has said you're going to have to walk-the-walk, not *just* read a book, I'll go ahead and give you some books ;) This: http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_sim_b_1, this: http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=pd_sim_b_6, and this: http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=pd_sim_b_5. There's plenty more, but those get trumpeted at my workplace constantly.
Merlyn Morgan-Graham
@Merlyn, thank you!
Michael
+4  A: 

I think a hybrid to both the Mike and Neil's answers is appropriate. You need to have a firm understanding of practices and patterns, and understand the popular programming languages as far as what they are trying to accomplish. As a programmer, I find the code itself is a small part of the job. Understanding the business need and using proven approaches to generate applications that are useful and meet the need of the stakeholder and user community is what this job is about.
You can thoroughly understand all the code you want, but if you do not know how to approach each problem set, then it does you know good. Trust me, I see it all the time.

Zacho
You hit the point, Zacho. The thing is I do understand the big picture and even I understand how the solution can be implemented, but I just do not have the skill and the aptitude to code the solution in a way that follows design patterns and practices. And now I wonder if I should get into these things... it seems like there is just too much out there behind the line.
Michael
@twelvedesign "I do understand the big picture and even I understand how the solution can be implemented" - all pointy-haired bosses think that.
anon
@twelvedesign no offense, but if you do not have the skill nor aptitude to code a solution in a way that follows design patterns and practices, then you do *not* understand the big picture and you do *not* understand how the solution can be implemented. If you get yourself in a position to dictate such things to other developers who do, well, then, I see some appearances on TheDailyWtf in your future.
qstarin
@qstarin I understand these things enough not to tell coders (who know what they are doing) how to implement stuff.
Michael
@Zacho But maybe those of us that have to design things like real time trading systems do find that code is the job?
anon
@Michael You have simply switched your acceptance to another answer that says what you maybe want to hear. I do not want you to accept my answer - it's not like I need the rep - but you should not accept anything within 24 hours, IMHO. And in the case of questions like this, I'd ask you to look into yourself and try to see why you asked the question in the first place - maybe you don't really want to be a "designer".
anon
@Neil, I am new to this place, and this is the first question I asked. I am still finding my way around. I really appreciate your input. I do want to be a designer! And I want to be able to speak to coders in a way that is comprehensible. Also I am a bit afraid that without decent coding skills I won't be able to compete on the job market. So I feel like I need to know more about coding, but how much? I cannot know it all!
Michael
@Michael One last time - you cannot design software without being a very competent programmer yourself. This has been proved time, after time, after time,. I'm sorry if that's not what you want to hear, but it is the fact.
anon
@Neil, I am sorry that I got you angry. I really am. That was not my intent at all.
Michael
@Michael Neil is correct in that if you want to be a part of the software design process, you must have not just knowledge, but experience. You can know about code all day, but until you have actually implemented solutions, you cannot design the correct patterns for things to be intuitive and maintainable.
Zacho
+1  A: 

What are you more interested in? Business, or programming?

If you are more interested in business, then by all means, become a senior "project manager". You can still design the project, and specify goals on how it will meet customer needs. I have seen plenty of people who were very successful at this, who were neither good at CS, nor pointy-haired bosses. I have also seen plenty who were fairly decent at CS.

If you are more interested in program architecture and design, you have to become a decent programmer.

Either of these will take you about ten years of active practice after you have learned the basics in school. You will have to create real projects, rather than just going through the motions. You will have to start with the basics, and expand. The entire time, you will have to read more books, keep up on trends and the cutting edge, and work on improving while you aren't at work.

Of course, plenty of people keep their jobs and don't get good, and manage to push up the career ladder. Ninety percent of the job (any job) is to show up, smile, nod, and make a comment from time to time. There is a reason that the majority of programs (and companies) out there are chaff.

I see that you already have industry experience, but judging by your career path, it sounds like you might have only gotten your toes wet in each area. It will take a long time, and it won't be easy, no matter what path you choose. Unless, of course, you decide to coast. It is up to you if this is enough to aspire to.

Merlyn Morgan-Graham
I guess I lean more towards design and business side, I just do not think I can make a good coder. Maybe I could if I was 15 years younger. So that's why I ask, what is 'a must know' about coding for non-coder or non-developer if you wish.
Michael
@Michael: don't believe the people who say that you have to be young to be a good programmer. Age is irrelevant, as long as you are passionate to learn.
Ether
@Esther, I am passionate, but I am limited by the work and family as well. I cannot spend days (even hours) learning everything. I need something more practical to get me going and lay a solid foundation for whatever might come up in the future. At this point I realize that I need to know OOP and design patterns well, because that is something that is applicable to any language and pretty much any project, but what else?
Michael
@Michael: Maybe I gave the wrong impression. You don't have to learn everything, ever. Computer science and business are too big. You just have to practice the things you do learn, and try to add to it. That's why it takes ten years :) If you are working and going to school right now, it should take no more time out of your day than what you are currently doing, and often less. The real trick is that practice, not reading, makes perfect. Just make a skill toolbox, and keep adding to it, while still polishing your old skills semi-regularly.
Merlyn Morgan-Graham