Thread: Is it not learning C++ shooting myself in the foot?

  1. #31
    Make Fortran great again
    Join Date
    Sep 2009
    Posts
    1,413
    If you are really serious about this line of work, you need to go back to grad school. And don't get a master's in CS, get a master's in physics or something focusing on (applied) computational science. I don't really know of any companies who solely work on meshing; they work on the solving part as well. With a master's in physics, you could try to work at a company like COMSOL.

    If you warm up to a professor and study with them for a while, they may give you a job as a TA or RA and you'll get free tuition (best case). Also, there are a lot of fellowships available for students interested in computational science.

    Seriously, you have to play the education game. I'm 26 and I just got my BS last year. Why? Cause I was this smart when I was 17, but no one believed that until I had the degree.

  2. #32
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    Quote Originally Posted by MutantJohn View Post
    So, I know the following then: Java, IDL, C, C++, CUDA and I mostly want to stick to scientific computing.
    You will eventually also need the R programming language.

    Quote Originally Posted by MutantJohn View Post
    What can I do to convince a company that I am just as apt if not even moreso than a CS person?
    You need to become a CS person first and a physicist second. Meaning you need take a second course, and you better become good at it (which, includes knowing in the year 2013 what Visual Studio is).
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  3. #33
    Lurker
    Join Date
    Dec 2004
    Posts
    296
    I am a bit late to this thread and I haven't really bothered to read the whole thread, so what I say might already have been said.

    If you want a job as some kind of programmer you have to have as much knowledge as possible in your "toolkit".

    I recommend learning several languages that have a different paradigm from each other. Preferably you learn one procedural language like C, one object oriented language like Java or C++, one functional language like for example Haskell/Lisp/SML/other and for example Node.JS for async programming. Then there are some few other languages like Prolog and stuff that are worth knowing. The reason for learning languages are not only for knowing a lot of programming languages. These languages all have different approach to solving problems and you will need a different way of thinking and approaching problem solving to use them fully.

    That being said, I don't think that object oriented programming "redefines programming as a paradigm". You can structure the code as if it was object oriented programming in C as well. Sure, C++ has templates and other fluff, but that has nothing to do with object oriented programming. Object oriented programming is a way of thinking for structuring modules in a good way and how to encapsulate data. You can do that in any language. I would even go so far as to say that most of the project I have worked on in the programming industry thought that their project was OOP just because the used C++, even though they where structured as any C spaghetti code. "We use C++, so we do object oriented programming". What a load of crap...

    TL;DR: Being a good programmer isn't about knowing a lot of languages, it is about knowing different ways of thinking, solving and structuring a program. As a programmer you are expected to be able to learn a new programming language in a week or so. What you need to learn are the way of thinking in different classes of programming languages, for example procedural, functional programming and object oriented programming.
    Last edited by Jimmy; 08-11-2013 at 09:53 AM.

  4. #34
    Officially An Architect brewbuck's Avatar
    Join Date
    Mar 2007
    Location
    Portland, OR
    Posts
    7,396
    Quote Originally Posted by Jimmy View Post
    As a programmer you are expected to be able to learn a new programming language in a week or so.
    I wouldn't go so far as to say that. Lots of languages are superficially different but actually very similar on a deeper level. These families of languages are more easily learned by someone with prior experience in another language in the family. But switching programming paradigms can be quite difficult, even for programmers with lots of experience. My personal case in point is Haskell, a language in which I clearly see a lot of power, I can understand some basic examples, but still haven't managed to grasp even at a merely competent level, let alone be fantastic at it.

    In other words, if you can learn a new language in a week, I don't think it was really a new language.
    Code:
    //try
    //{
    	if (a) do { f( b); } while(1);
    	else   do { f(!b); } while(1);
    //}

  5. #35
    Registered User
    Join Date
    Jun 2005
    Posts
    6,815
    Quote Originally Posted by brewbuck View Post
    In other words, if you can learn a new language in a week, I don't think it was really a new language.
    Either that, or you have learned the language very poorly.
    Right 98% of the time, and don't care about the other 3%.

    If I seem grumpy or unhelpful in reply to you, or tell you you need to demonstrate more effort before you can expect help, it is likely you deserve it. Suck it up, Buttercup, and read this, this, and this before posting again.

  6. #36
    Registered User
    Join Date
    May 2009
    Posts
    4,183
    Quote Originally Posted by grumpy View Post
    Either that, or you have learned the language very poorly.
    In the past, I worked with someone who claimed to have learned a programming language in a week.
    The thing was he knew very little about programming in any language;
    so, I can really believe that in a week he could learn as much about a new language as he knew about his old languages.

    Tim S.
    "...a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are,in short, a perfect match.." Bill Bryson

  7. #37
    Registered User
    Join Date
    Jun 2005
    Posts
    6,815
    Quote Originally Posted by stahta01 View Post
    In the past, I worked with someone who claimed to have learned a programming language in a week.
    The thing was he knew very little about programming in any language;
    so, I can really believe that in a week he could learn as much about a new language as he knew about his old languages.
    That's consistent with my experience. It's not hard to learn the basics of a new grammar and syntax and, yes, that can be done in a week or three. But the key to using a any programming language effectively is in the techniques. Very few "I can learn it in a week" programmers understand the technique that is critical to being a productive developer.

    Hell, I picked up basic German in a month before travelling to Germany (an introductory vocational course). I was able to ask for basic directions, make basic requests, find food, and find my way around. But my accent was terrible, my sentence construction horrible, my conjunctions worse, and it was some time before I could speak German much better than a toddler in Germany. And that was with the help of German friends who knew me well enough to not be shy about correcting my blunders. Realistically, it is not much different with programming languages.
    Right 98% of the time, and don't care about the other 3%.

    If I seem grumpy or unhelpful in reply to you, or tell you you need to demonstrate more effort before you can expect help, it is likely you deserve it. Suck it up, Buttercup, and read this, this, and this before posting again.

  8. #38
    Lurker
    Join Date
    Dec 2004
    Posts
    296
    Quote Originally Posted by brewbuck View Post
    I wouldn't go so far as to say that. Lots of languages are superficially different but actually very similar on a deeper level. These families of languages are more easily learned by someone with prior experience in another language in the family. But switching programming paradigms can be quite difficult, even for programmers with lots of experience. My personal case in point is Haskell, a language in which I clearly see a lot of power, I can understand some basic examples, but still haven't managed to grasp even at a merely competent level, let alone be fantastic at it.

    In other words, if you can learn a new language in a week, I don't think it was really a new language.
    Thanks Brewbuck, for saying this. This brings me to my next point. You can't learn languages that quickly unless you already know the basic concepts behind the language.

    I recently learned Go in under a week, and I mean learned it enough to use it at work at a professional level. But I am already a proficient C programmer, I know how closures work and so on.

    Outside of work I aim to learn a new language every month or so. In reality I learn a new language about every 2 to 3 months. I have only given up on 1 language I have tried to learn so far and that is Prolog. It felt completely backwards to me. I have yet to pick up Haskell. In fact it is either that or Clojure I'm aiming for next. I have a solid background in functional programming, so I think either or will be fun to try.

  9. #39
    Lurker
    Join Date
    Dec 2004
    Posts
    296
    Quote Originally Posted by stahta01 View Post
    In the past, I worked with someone who claimed to have learned a programming language in a week.
    The thing was he knew very little about programming in any language;
    so, I can really believe that in a week he could learn as much about a new language as he knew about his old languages.

    Tim S.
    My point was that if you learn enough languages to know the basic concepts, the it is fairly easy to pick up a new language. I'm not talking about expert level. I'm talking about a solid understanding, enough to be able to use it at work at a professional level.

    But then again, I know 7 natural languages as well and believe that I can pick up a new natural language, that is similar to any one of those I already know, in about a month or so. Again, I will never sound or speak it as somebody born in a country where the language is spoken, but I will be able to hold a fluent conversation.

    Who knows, I might be a genius, I highly doubt it though...

  10. #40
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Software engineering is just as much about people skills, dealing with project deadlines and project managers, ridiculous requirements or none at all, design, discussion, teamwork, research, communication, etc. as it is about raw coding.

    I do not agree with the new language in one week statement. It is possible for a competent C++ programmer to learn C# within a week or so and be fluent enough to start writing fairly advanced programs. Since C# constantly attempts to hide the nitty gritty and low level stuff from the programmer you never really feel like you know exactly what the heck is going on deep in the .NET framework. Note that I said learn the language as in syntax and grammar. Learning a language does not mean you understand or know every application of the language or how to apply it to solve various problems.

    I also feel it is very important for a software engineer to be well rounded and able to adapt to many different types of projects, different types of people and team chemistries, different types of software development lifecycles and different types of software. Specialization is great but will likely cause you to have far less job opportunities and if you are not careful your skills will stagnate because you have specialized in one area for so long.
    Last edited by VirtualAce; 08-15-2013 at 06:05 PM.

  11. #41
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    Quote Originally Posted by Jimmy View Post
    I recently learned Go in under a week, and I mean learned it enough to use it at work at a professional level. But I am already a proficient C programmer, I know how closures work and so on.
    This is just a different way to look at the word "learning". While I cannot disagree with your use of it, for most of us, learning a programming language means knowing it to a higher level of understanding. After all, that's were the real power of problem solving resides. You can solve most problems with Go in under a week of study. But can you solve them in an efficient and elegant manner? The learning process, as is, has just started for you.

    An analogy will be piano playing. You can learn to play piano in under a week. But you'll play terribly until you actually learn how to play piano.
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  12. #42
    Registered User
    Join Date
    Mar 2010
    Posts
    583
    Quote Originally Posted by VirtualAce View Post
    Software engineering is just as much about people skills, dealing with project deadlines and project managers, ridiculous requirements or none at all, design, discussion, teamwork, research, communication, etc. as it is about raw coding.
    Agreed. Being able to look at a problem and get to the core of it, asking the right questions and challenging assumptions, being able to turn vague and fluffy into well defined well understood.... really important things for a software engineer.
    Having knowledge of different techniques and different languages is definitely important -- otherwise you probably will try to butter bread with a hammer at some point.
    Being willing to learn and interested in learning more stuff outside your comfort zone is a good thing.

    You have to be able to apply ^^ that lot to practical problem solving, coding, design... otherwise you end up with an office full of managers.

    Not everyone I work with has a CS degree. There are a few maths ones, unsurprisingly, but I know of at least one with no degree, one physicist, one astronomer....
    Whether having a CS background is useful or not depends on the job I think. Algorithms and data structures probably always, automata and complexity theory probably less often.

    I think it's possible to get a job in software engineering without much of a background. I think pretty much all programmers are self taught, so you're not at a disadvantage there. Being young counts in your favour (learn quickly, work for not too much money). Problem is that for each job there'll probably be a few CS graduates who are less risky.

    MutantJohn -- definitely keep coding! Think about putting up a website and publishing your code on there -- just the interesting useful stuff you've written, and some words about it. It helps if you can show an employer something, especially if it's something good.

  13. #43
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    Quote Originally Posted by smokeyangel View Post
    I think it's possible to get a job in software engineering without much of a background.
    My life experience has taught me that much. However this is due to the fact software analysis and development is largely a collaborative task, even at the smaller scale of commercial software development. Project Managers and senior developers tend to collaborate closely on the analysis phase, for instance, with each individual skills complementing the others'.

    But I think we need to leave that behind and become increasingly more demanding of whom we hire as software engineers these days. Let's ignore for the moment large and credited software development companies like Microsoft with their mass market products. If we look at small to mid-size software businesses, that arguably make up the largest slice of the industry, these are divisions or companies that either develop in-house or tend to develop on contract. It's my guess, at least from my own professional experience, that the quality of their products is generally disappointing.

    Their products tend to have high maintenance requirements due to poor design decisions, software design guidelines are poorly written, nonexistent or tend to be ignored, while testing and QA are usually ad hoc initiatives. This is especially true of in-house development in companies without software development as their core business. Blinded by the curtain of the highly visible software produced by companies aiming the mass market, we tend to forget there's a much larger software development industry comprised of local businesses and in-house development divisions that are the likely place where a software engineer will end up working. Problem is little is being demanded of this professional category. Usually because there's no one fully capable on these companies to properly evaluate these type of candidates during the hiring phase or while they go on their daily duties. The end result, and what I've been noticing for years, is that bad software is developed under the artfully misguided idea that bugs and maintenance problems are never the direct result of bad design, but of bad programming.

    And these companies do tend in general to develop bad software, that nonetheless powers everything, from your local store to your government.
    Last edited by Mario F.; 08-24-2013 at 03:40 PM.
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Template Header Shot my foot
    By SevenThunders in forum C++ Programming
    Replies: 5
    Last Post: 03-17-2010, 11:54 PM
  2. Shot myself in the foot, but gcc provided the bullets!
    By Sebastiani in forum C++ Programming
    Replies: 9
    Last Post: 09-22-2009, 04:22 AM
  3. Foot Pedals
    By gvector1 in forum C# Programming
    Replies: 2
    Last Post: 06-25-2005, 02:00 PM
  4. 6' foot 3 womens
    By OneStiffRod in forum A Brief History of Cprogramming.com
    Replies: 19
    Last Post: 12-24-2002, 11:31 PM
  5. Shooting yourself
    By Theologian in forum A Brief History of Cprogramming.com
    Replies: 2
    Last Post: 08-24-2001, 05:09 AM