views:

922

answers:

13

Hello, let me ask your opinion. I'm 25 now, living in Germany.

I started with QBASIC, did some Java in Highschool, and after School I created some Websites in PHP. Now, because my Company is Microsoft Gold Partner, I've to use Microsoft all the time. C#, MSSQL, ASPX and Sharepoint <- I really hate it!

So, in my spare I concentrate to gain more knowledge (C++, Java, Silverlight or WPF), because it feels that I'm so far behind, in comparison for example to you guys, or other older employees in my company.

Do think that my behaviour is useful? Should I focus my time to become i.e. a pure C# Programmer? I did C# even before I started to learn some C++. Should I learn what do with pointers, memcpy and stuff like that, even if managed code brings us so much benefits? Or is it a waste of time, better invested in learning the latest technologies?

  • rAyt
+1  A: 

You need to understand things like pointers even if the system normally shields you from them. If you don't understand how the system is working internally it will be very hard to find some bugs. The pointers exist whether you see them or not. Things which exist can be wrong.

Loren Pechtel
I completely disagree, as far as I understand the theory behind pointers is to do something that should occur automatically anyway, not by specific instruction. Granted, I'm going to start learning C++ academically in just a few weeks but so far I haven't seen why I would enjoy any of the pointer math beyond the occasional fiddling to create magical datastructures in cumbersome ways.
Esko
+1. You should have a basic understanding of how the things you rely on everyday work. IMO that's one of the key differences between a hobby programmer and a professional. A hobby programmer can live with crude "and then, a miracle happens" approximations. A professional programmer should not.
nikie
That's partly my point: Pointers *are* magic, miracle is just a synonym for a certain magical thing. Sure I can understand why especially in low-level programming pointers are desirable and what's the benefit of telling the application to point to X instead of Y instead of having a whole framework on top of it do the same thing but in modern business code pointers are merely clutter because they don't offer anything over good practices. Think about it, if your code has `*` or `**` in every variable imaginable, what's the point of having them in the first place at all?
Esko
If you want to deal with dynamically sized objects then it's almost impossible to avoid pointers without incurring some significant overhead.
HandyGandy
+1  A: 

First of all, I totally concur about hating SharePoint and highly advise you not to let SharePoint development influence the way you write code.

As for your future and what to do with concepts like pointers and memory, it's good to have a solid understanding of that but it doesn't usually come up in managed code. A lot of people will disagree with me on here but I actually think you can have quite a lucrative and rewarding career without a strong CS background. I taught myself through lots of reading and engaging in online communities and I never went to school for CS. Hell I dropped out of high school to get my first job in tech support.

Might I suggest trying to hone your skills in testing code as a way to get exposed to different technologies, practices, and methodologies.

Josh Einstein
+15  A: 

The best approach, in my opinion, is to pursue what interests you. The technologies available are diverse and can often be used in a cross-context sort of way. Some technologies will be better suited to certain situations. If you want to be a web developer, WPF might not be the best thing to focus on (although learning it has some cross over with Silverlight if you want to get down to that conversation), and C++ would likely not offer you a lot of benefit either.

However, if you want to do things that are more complex, such as working closer to the machine level, managing memory and working within a business context that requires those skills, you should focus on those.

Just picking a technology because it will look good on a resume is the quickest way to become a mediocre developer.

mannish
I'd even go a step further and say that specializing in something other than the technology du jour will make you more useful than some sephiroth clone with the same 5 acronyms. For example... I'm pretty sure it'd be someone difficult to find a developer that understands Bellcore AMA Format call detail records. :)
Josh Einstein
Well, it's somehow my path. That training takes up to three years and and going to finish it this November. I don't feel ready to compete in the job market.
Henrik P. Hessel
Good topic. I've been thinking about moving into programming my own toy inventions.. I know I can make that R2D2 do waaaaaay more than those Hasbro guys..
madcolor
@Josh Einstein: +1 for "Sephiroth clone with the same 5 acronyms"
Chris
"I'm pretty sure it'd be someone difficult to find a developer that understands Bellcore AMA Format call detail records."But once you weed out the guys that can't write a for loop. it would not be hard to find people who can learn the EBAF.
HandyGandy
+8  A: 

It's great if you want to know more. I don't think that anyone can give you a list of things you should learn about and things you shouldn't. It's totally up to you. The list is so long.

I think you should find a job where you enjoy the work you do and have some experienced coworkors who will help you and inspire you. Everything else will just follow.

Vizu
+6  A: 

SharePoint is a dog. Fact. Let's move on.

You shouldn't be too afraid of doing C# all the time. It's not a bad language and it can teach you a lot about programming in general.

Learning about low-level is only going to help you understand it but I wouldn't put too much stress on it. You're kept so far away from pointers in .net 99% of the time, it's not really an issue. And I think it's fairly easy to understand how they work without having to learn C/C++ for an extended period of time.

If you#re unhappy with the level of new tech you're being exposed to, let your managers know that you want to keep advancing. You learning will benefit them just as much as you. If they're closed to that idea, they're idiots and you want to find a job in a place where they don't frown on their employees improving themselves.

Oli
Oli, thanks for the advice. I think, it's somehow the fear to develop myself in the wrong direction. My Specialist Training is very pratical and includes only about 30% Programming. The other 70% are things like budget- and projectmanagment.Maybe it's somehow a fear to end up like semipro in three different languages instead of being THE java programmer or the C# programer.
Henrik P. Hessel
I agree: for me (I've did a 5 years CS degree) formation and theory is very important, but what gives you the theory or the low-level programming is knowing how does it works in fact. By example, what happens at a lower level when you instantiate an object, how much memory occupy, and so on. You don't have yo be a specialist while you understand the basics: pointers, memory allocation, data structures. And yes: try to find a technology you like and you can appy so you can have fun with it. You'll learn a lot from doing.
helios
+1  A: 

You need to keep in mind that languages, IDEs and development plattforms, are just and merely tools. Nothing more and nothing else than tools. Picking the right one is in a first look always matter of choosing the tool that fits better into the environment for which you are developing. Then when you have no more than two or three options the decisions depends of other factors like your company budget, the skills of your working team, your deadline and at last (always at last) your likes or dislikes about each one of the options.

Definitively, knowing a new language or programming environment is always good, but don't get tied to any one of them. Keep your mind open as far as you can.

backslash17
+1  A: 

I also happen to be in Germany, and I definitely see that MS technologies are not loved here. It took me then half a year to find a job and I find it nonsense. Even before the economic meltdown I was sure you don't make a good career in IT here. I still have this opinion now.

Addition to the point of the question. I think learning C++ is a must if you wish to respect yourself as a professional. C++ is also cosmopolitan, it does not belong to Microsoft, Sun, Oracle, IBM or else. So your knowledge will be transferrable. On the other hand, nowadays there are even less jobs with low-level programming than with managed platforms. What are C++ areas? Speed-efficient algorithms, close-to-hardware, drivers, embedded systems, programming of microcontrollers. I somehow feel these branches have been badly affected by recent events. If you're thinking about Machinenbau, BOSCH/Daimler/Siemens/etc. are feeling very bad. SAP has developments with C++, but they have Einstellungsstop from the last autumn. Small shops are also likely to freeze hires. When it all gets unfrozen (if ever) I think you will more likely to find occupation with higher-level technologes. My very subjective opinion.

User
Well, I like Microsoft (besides Sharepoint Development, which is a bitch). And the ELMS Programm by Microsoft is really great. Did you go to college or what did you do? (Vielleicht auch eine Berufsausbildung?) Specialist / apprentice Training?
Henrik P. Hessel
I got master here in Germany after having gotten degree and some work experience back in Russia. No special trainings really, if you mean certification. I was doing C++ before, ASP.NET/C# these days. The later experience with job search left me quite frustrated. Developers are just not needed here, at most cheap consultants. I suppose with all this crisis-hassle, many companies silently and without getting noticed will just close positions here and outsource to India. Have you made better experiences?
User
Outsourcing to India is unlikely. That's way too expensive. Do you have any idea what kind of startup costs you have to make for that to work? To eastern europe, sure.
Stephan Eggermont
Go to smaller companies. You will find lots of shops that use MS technology, and you will find lots of shops that hire. Even now, even in Maschinenbau.
nikie
+1  A: 

Like others have said, at the end of the day, you have to pick something which interests you the most. When you have a passion for something, I promise you, you will do whatever it takes to be good at it.

The fact that you feel that you are so behind your colleagues says that you have no problems admitting the things you don't know and that's a good sign if you want to be a good programmer. All of us here could agree on the fact that, the more you know, the more you feel you need to know about other stuff.

My advice to you is that, why don't you spend some time doing C++? See whether you like it. I'm sure whatever you have learnt from learning it will not go to waste. It will only make you more knowledgeable and a well-rounded programmer.

Ghazaly
+3  A: 

You have to pick your battles in the workplace. If you hate Sharepoint, make sure your employers know that while you can do Sharepoint, it isn't a great fit for you. At the same time, it may be worth seeing if there are recruiters in your area that may know who is looking for what kind of work you'd like. Do you like structured work environments or would you prefer the freedom of a start-up where there isn't a lot of process developed? Think about what kind of development you want to be doing: Drivers, embedded systems, web applications, games, databases, or something else. Once you decide this, which could be done via trial and error, then you have an idea of what to go and learn to become a player in this realm.

Learning the latest technologies can work for you and against you. Not every company has .Net 3.5 applications that they are maintaining and supporting so knowing some things about the older frameworks can be important as well.

JB King
+1  A: 

I agree with what most people here have said: Do what you like best, and do what you're best at.

But I would also suggest to broaden your focus: Your post sounds as if you only did web development in high-level languages so far. That's a big market and there's nothing wrong with it, but there are lots of other markets. For example embedded development, signal processing or industrial process control/visualization software. Look at those, too. Maybe there's something out there you like better than developing websites. (At the very least, Sharepoint is not very common in that area.)

nikie
hi nikie, thanks for your answer. I just edited the question to reflect my current career level. I'm doing a lot of blackberry and iphone development lately. And it's quite fun :)
Henrik P. Hessel
+1  A: 

I am a student I love the language (C + +) and read by many ♥ But I felt it was useful he told me in a way that has become a successful programmer C + +?

hassan
+1  A: 

I'm an embedded programmer using C++ and developing using MS tools, including SharePoint. That doesn't stop me from hacking on the command line and using a real editor like Vim. I'm not just old school. I think it's a shame that younger developers aren't used to making their own tools.

So that's what I'd recommend, and here's how: 1. Download cygwin 2. Learn enough bash to find your way around using the shell. 3. Learn enough perl to be able to write a search/replace filter (with pipes). 4. Read 'Pragmatic Programmer' and 'The Art of Unix Programming'. 5. Look around for open source projects that are both active and in need of help, and contribute.

I know that sounds like geezer unix hacker advice. But lessons learned in writing sharp pointed tools for command line use will carry over and make you a great programmer in any language.

Okken
+1  A: 

I suggest you go to the Stanford Engineering Everywhere site.

Go through these classes:
Programming Methodology
Programming Abstractions
Programming Paradigms

your pace can be quicker then the pace they set out, but do not try to cram all the courses into one week.

Make sure to watch the videos. Videos:Programming Paradigms I'll leave it to you to find the rest of the classes.

After that you can go searching around the web for various courses similarly made.

HandyGandy