Looking for some career advice

Discussion in 'Webmastering & Programming' started by Mattyb085, May 15, 2019.

  1. Mattyb085

    Mattyb085 n00b

    Messages:
    6
    Joined:
    May 15, 2019
    I have been thinking about making a major career change and am looking for some help. I am currently underwriting car loans for dealers and it has been getting exhausting dealing with people who are basically con-artists all day long. I have been looking into getting into programing but I really to know how to do it in a why where I can actually find a job doing it. There are quite a few different options to get an online computer science degree but I am not sure if they are actually worth it or if I would need to go to an actual university to get one. I have a BS in economics already so I am thinking that might help as far as how the resume looks. Any advice would be much appreciated, Thanks!
     
  2. modi123

    modi123 [H]ardness Supreme

    Messages:
    5,144
    Joined:
    Sep 6, 2006
    Look at a local job board. See what folk are looking for in terms of languages and skill set. Perhaps pop into a local developer meetup and chat your locals up. I would also think talking with local recruiters would help orientate what the market is like in your area, what sort of quals are needed, etc.

    Education wise depends on the schools, but if you have an 'adult education' community college you can bang out a super focused associates degree and go around using that combo with your existing degree.
     
  3. JVene

    JVene n00b

    Messages:
    15
    Joined:
    Apr 25, 2019
    I've been what many people call a programmer (developer, software engineer....lots of different names apply) since the early 80's.

    I've watched the industry change.

    I've been teaching programming for a robotics club at the local high school as a volunteer (when my son joined the club). The teacher was a highly educated mechanical engineer, but had zero knowledge of programming, so I had to jump in when my son started in that club.

    As a result I've also had an opportunity to watch what is being taught at colleges and universities as the seniors moved on to college, and as they approached graduation.

    First and foremost, you're going to learn more, and faster, on your own with a PC. That's not a degree worthy study, but you CAN then qualify for various certifications which are known to be acceptable credentials (look into Microsoft Certified Engineer courses and certification centers and see if the employment options that interest you look for those). If you prefer a CS degree, that's fine, but again you'll learn more by "tinkering" on your own from some good texts on the subject, if you approach the subject with interest and focus just like you required to get a degree in economics. I don't suggest you drop the CS degree, on the contrary if that degree is what you need for the targets that interest you, but don't wait for school to begin your study. Diving in right now, even tonight, makes those classes much easier.

    That said, you should also know that there are several languages, some with specialized purposes. C++ and C are legacy languages (in that the origin dates from '68), but are widely used for high end professional development where performance is critical.They are also "nasty" languages, as they are complex (tedious detail mostly), but they are powerful (the high performance CAD and game engines are written in C++). These two languages are used to make software like Photoshop, ProTools, AutoCAD, 3D Studio Max, and (C especially) operating systems. Jobs are high pay, but employers usually demand experience for that (meaning 5 years or more).

    It takes around 18 months to learn C++ on average.

    C# and Java are similar languages which are simpler, easier to learn and are "safer" for programmers (less crashes). Performance is quite good, but in performance critical situations they suffer. They are popular for "corporate" programming tasks (custom software built in house at large companies). Jobs tend to be a notch lower in pay than C++, but that's because they aren't looking for long term experience, just competence (for which a MSCE certificate may do). Java is typically taught in universities, often considered the best language ever created (an opinion I don't share). C# is in fairly high demand. I loathe it myself, but then as a programmer I'm more of what you would call an engineer than a programmer. A great many programmers don't really know math, for example, or physics (I know both). As an economist, your math background is a huge benefit.

    Then, there's a host of other languages with various degrees of interest and applicability. Python is often mentioned, and while I despise it, it is beloved by many who know it well.

    You may well be required to know at least one language (like C#) and another, for business, SQL (for databases, rather simple). I've worked in at least 10 different languages in the last 30 years, happily forgotten 5 or 6 of them. My favorite, C++, had major revisions that drastically changed the nature of the language, once in '98, again in 03, then 11, 14, 17 and again this year. Lately I'm working in both C# and C++ (because of the Unity game engine).

    However, if you intend to capitalize on your economics background, consider what is popular in that field (research, ask around), see what may be in demand. There might be research facilities in companies, government work - I have no idea as I have no experience in that field.

    On the other hand, maybe what you want is to learn on your own, learn to build games using, say, Unity (C# coding), and sell games on Google and Apple's stores. Some utterly fail if they have no drive and imagination, and you will need to pair with an artist for the modeling if your "vision" involves artwork for the game(s), and there's sound effects / music to consider. The upside, if you make a moderately popular game, your potential customer base wired into the stores is some 1.8 + billion customers. Even if you get only 1% at 50 cents each, it's real money.

    There are millionaires based on that business model. "Candy Crush" mixed in a sinister but of psychology, and pulled in hundreds of millions a year (that was a while ago, too).

    You don't have to make a legendary product, either. Plenty of games sell $250,000 a year and that's it. Hardly "known" in the world, hardly a "hit", but if you could do that once every 18 months would you be happy?

    Plenty of options, too many in fact.

    Have you a direction to consider and explore more?
     
    Last edited: May 15, 2019
    Brian_B and dvsman like this.
  4. Mattyb085

    Mattyb085 n00b

    Messages:
    6
    Joined:
    May 15, 2019
    Thanks for the responses. I don't have an issue teaching myself languages my main concern was actually convincing someone to hire me by doing that. I'm definitely going to look into the MSCE certification as that might be my best option right now and then go from there. Do you have any suggestions to what certifications would be the most marketable or even the best stepping stone to move up to bigger things?
     
  5. JVene

    JVene n00b

    Messages:
    15
    Joined:
    Apr 25, 2019
    Which is why I point out that self study aids in getting through course material faster. The wide range of employer targets means that many will require certain credentials, while others have almost no particular requirement beyond a vague "college degree" requirement. A great many come to computer programming from another discipline anyway, so you may leverage your math and economics background by learning on your own.

    Do you have any suggestions to what certifications would be the most marketable or even the best stepping stone to move up to bigger things?[/QUOTE]

    Since you mention programming specifically, the developer's certification (MSCD) would be in line with your given interest.

    That said, there is demand for network administrators / engineers. Organizations frequently need someone to establish security on WiFi or wired networks for offices and institutions. I don't recall which (and some of those may be found by other "non-Microsoft" organizations, or a short course at a local college on network engineering.

    However, there is MCSE in various fields, such as databases or business applications. There is an entire rather marketable skill demand for those who create/define databases (SQL, which you can study on your own now as you consider the matter). There's one specialty in that field dealing with spatial data - like that for Google's maps and all the related information about businesses and socio-economic data tied to geographic regions of the world.

    I do think it is better to pursue a direction in line with what interests you more than just what is most marketable. My reason is based on life more than career. You can end up skilled for a task you end up despising. Personally I loathe the act of installing operating systems and applications for businesses, but I did that as a consultant for a few years. I can't seem to get away from it because the very moment a business owner realizes they're talking to someone who "knows everything about computers", they have requests that range for how to install, say, a server for their CAD workstations, to how to setup an FTP server for file exchange, or diagnose a workstation that just seems to crash (when none of the others do).

    It is one thing to know how to program, but quite another to write software on a particular topic. In my own career I've written plugins for AutoCAD, 3D Studio, Maya and other 3D tools, which I very much enjoyed. To do that, however, I had to understand how to draw 3D models, a bit about architecture, something about mechanical engineering and electronics (the subjects the tools addressed). I was, in my youth, a classically trained musician, so I've also written plugins for various musical/audio workstation software. I knew enough about business (accounting, database, etc) to write corporate business applications for the first 10 years of my career, but I really found my calling when I consulted for video post production, then branched into game development.

    My point here is that the computer is like a piano. You need music to play. It could be classical, jazz, you might switch to a synth as part of a rock band, all based on knowledge of the keyboard.

    If you knew everything about C++, C#, SQL, Java and Javascript, you'd still have to figure out WHAT to make. You might not be able to make just anything if, for example, the target were software for a medical device.

    That said, sometimes the "most marketable" skill set is also the most crowded. That makes a buyers market, but you're not the buyer. You're the seller. Sometimes the best market to get into is one that is not crowded, so your not competing against hundreds or thousands of other applicants.
     
  6. atp1916

    atp1916 [H]ard|DCoTM x1

    Messages:
    3,680
    Joined:
    Jun 18, 2004
    Where are you at JVene ?

    Location is a huge determinant of your chances. If you're in the right geography, going to school for a CS/SE undergrad is a no-brainer. If you can't relocate, then perhaps not.

    In the DWF area here in Texas, entry level "freshly minted" CS/SE grads get 75k+ a year.
     
    Last edited: May 18, 2019
  7. JVene

    JVene n00b

    Messages:
    15
    Joined:
    Apr 25, 2019
    Location certainly defines the options, and that can be surprising. There's a small town in Texas with a shocking number of large corporate facilities nearby. There are some large cities with economic focus on tourism, which defines a lot about what business requires there.

    Texas is seeing lots of growth. California, the traditional Silicon Valley area in particular, is so expensive to live in that I wouldn't want to move there for less than $1 million a year (but then, I'm a 50 something so it would take a lot for me consider such a thing). $75K in one area can afford a better life than $150K in others, and that fact can catch a lot of people in an unpleasant surprise when looking out of state for an opportunity.

    The OP, Mattyb085, has a BS. It may not matter to many employers if that's focused on computer science specifically, and while we don't know Matty's location, it seems that a university or college is not immediately and easily accessible. Any BS would put Matty in a position to take 2 years and turn that into a masters, this time focused on computer science.

    That's not always an easy thing to do, though. We don't know Matty's age, but with a BS & the story of underwriting loans, I'd assume Matty is somewhere around 30, could be as young as 25.

    This would make the certification idea a good possibility, but like you've pointed out, one should check out the options or consider relocation as part of the career shift, and relocation is much easier in youth and without children.

    I'm in a major city in Florida, but I would argue this isn't the best location to find a job as a programmer of high skill. They are here, but there are hubs of manufacturing, engineering, and software development elsewhere in greater numbers. Here, there are LOTS of medical facilities who need the occasional service of setting up a network, both WiFi and wired (with workstation installation), to which a number of firms cater, and for that certifications work fairly well.

    I was trying to focus on the notion of an employed adult considering continuing education, rather than someone starting or currently in college.

    It so happens that I started my own firm long ago, and I consult for firms that start or expand staff. Some companies insist on BS or masters, but they do so out of convention and are usually larger organizations. There are numerous small firms, however, with much more flexible attitudes.

    I consulted for one about 10 years ago looking to expand staff for a complete re-write of an application they'd sold to a specific industry for years. Their original product was written for Windows '95, and though they had maintained updates all along, they realized they needed to move to a platform independent product that could support anything from tablets to MAC's. They had zero concern for credentials. Two of the owners wrote the original product themselves and were entirely self taught, but had not really updated their skills over the years. Qt and wxWidgets were completely foreign to them, as was C++ 03. Their work was still fashioned to the style of C++ 98 or older.

    The applicants varied from some with masters degrees to many barely out of high school. Some of the 19 year olds were in college, but had been working on games in C++ for several years as kids, and had surprisingly advanced skills. They hired one on the condition that he continued toward his degree, and set a full time schedule to work around his classes.

    That kid, a few years later, became their lead. When their new product was completed and the intensity of the work faded into maintenance, he sent his resume out (everywhere), with the blessing of his employer, and landed a job in a Fortune 500. I dare not say the company because you'd be able to identity this person by my next point. He's VP of product development now, of a company you'd know.

    At the same time, one of the highly credentialed applicants they hired was competent, but not particularly talented. That's why the "kid" ended up in charge. They "kid" had talent. He had that capability, that simply isn't taught, to get things done, and to get people to work together.

    I, myself, had something of that in my early history. I started "consulting" as a programmer when I was 18. I had no degree, but it was the early 80's. It so happened that when I put on a tie and a suit, I could play the part of someone older. Handing out a business card instead of a resume meant no one actually asked questions or conducted much of an interview. That first year I served mainly contractors, from general contracting to plumbing. When I was 20, in '83, I landed a Fortune 500 contract, which I maintained for 9 years.

    That was, however, a different era. I'm not sure it would work quite that way today, but I do have evidence that suggests something similar can be made to work. The catch, even without the degree, the (rather audacious, ambitious young entrepreneur) must be able to deliver what is promised, on time. Given that, which is how I did it, a little chutzpah and what one might call "slight of hand" in self representation can turn an otherwise underwhelming resume into a hidden attribute while presenting all the best qualities forward. It is quite a risk, too, because one can get sued if they fail. If you're NOT young, maybe that's too high a risk. I didn't have kids, or a mortgage, and I scrapped the last 5,000 miles a 70's Ford was ever going to drive. I took my earnings and went back to school, too. Foolishly, I didn't incorporate. I didn't even know what that meant at the time. Fortunately it didn't hurt me at the time, but looking back...yish!

    Matty's interest in changing careers interested me, because I've had something similar in a way. I've been a "programmer" my entire adult life, and learned the basics back when barely 1 in 1,000 homes had a computer. After years of consulting (which means, really, I write software on contract sometimes, I consult for teams that are stuck sometimes, I help build staff for something new), the iPhone came out.

    At first I was merely curious, but when Android came to be, there was a commercial they released touting the "expanding universe of applications", at a point when there were, at most, about 10,000 titles or so in their App store. It hit me, though, that this was a new way to market a low cost product to a huge audience. I had consulted for video post production, for robotic manufacturing, so I knew the math and the techniques. I decided to write some apps for mobile and see what might be possible.

    Now, one might look at something like Angry Birds or Candy Crush and marvel that such a thing could earn hundreds of millions. In some ways I find what is under the hood a bit sinister. The entire game industry uses a branch of psychology I really think violates the terms of a psychological practitioner. They push beyond the boundary of decency. I don't mean content, though you'll see vulgar and violent content in some popular games, you really can't say Candy Crush is offensive in any way, on it's own. They prey upon a particular weakness in the human mind, and I find THAT offensive. Which is to say I'm not of the mind to even try to build a billion dollar product of that's the direction it takes. I'm fine with a few products that bring in more than if I owned a bar or a car dealership.

    Now, that's not a "jumping ship" kind of shift of career. I'm not switching from underwriting loans to crafting Android apps. If Matty didn't have a background in math (economics does not treat math lightly you know), or some other qualifying subject, I'd think this is a bit of a stretch. To learn software engineering as an adult in this particular era is tough to imagine without some extant knowledge of a technical and sophisticated nature. Matty may be able to pull this off, though.

    I'd really think a "self test" is in order.

    That's why I really pushed the notion of self study now, as in yesterday. Download Visual Studio CE, get a book on C# or C++ and dive in. It would take maybe 3 or 4 weeks to realize if the subject is actually of interest and practicable to accomplish. If it isn't going to work, if Matty (or anyone) just doesn't actually find it comprehensible, and if the rate of advancement is going to be too slow, that 'experiment' of self study would show it. Better to know with nearly zero investment in a school, now.

    Some people find it impossible. Others find the study nearly trivial, exciting and empowering. I would expect someone who actually earned a degree in economics has all the mental power required, but there is still something of an intangible "intrigue" required. It it me when I was 12. I knew within hours I could not find anything more fascinating. Some people have a visceral and repulsive reaction to the task of writing code, especially when the compiler flame throws 999 errors at you (and gives up issuing more).

    Then, when you notice that fixing one problem eliminates 900 of those errors, then the next "fix" drops that to 2 complaints, and the finally the compiler replies, "Done", and what you built works - some people just get hooked by that.

    If THAT happens, nothing else will stand in the way. I'm still talking about an adult trying to expand in new directions, considering what ever might work to fashion a new career direction. Once someone discovers that fascination with building a working machine out of logic and words, there's a force behind that which can help find and create opportunities.

    That might be a $75K job, sure. Nothing at all wrong with that. For some, it might become a product sold over the Internet, from spare time, building an income that may well be much higher.
     
    GoldenTiger likes this.
  8. atp1916

    atp1916 [H]ard|DCoTM x1

    Messages:
    3,680
    Joined:
    Jun 18, 2004
    Aw crap. My bad JVene . I meant that for the OP Mattyb085

    Good post, and thanks for the perspective!
     
    JVene likes this.
  9. Mattyb085

    Mattyb085 n00b

    Messages:
    6
    Joined:
    May 15, 2019
    That's a lot of great insight, thanks! I am 33 years old living in the Minneapolis area. I have done some limited VBA in excel over the years, which basically consisted of googling what I wanted to do and finding the code. I realize its not quite the same but I understand the underlying concept so I do think its to much of a stretch that I could learn full coding languages. I bought a couple udemy courses in java & c# to try them out because for $20 why not? haha

    My main concern for going back to school is mainly a financial one. I see every day at my current job how many people are crippled by student loan debt and don't want to put myself in that situation. The opportunity cost of not working for 4 more years would also be very expensive. I did also find the University of Minnesota is offing a coding boot camp which I think might be a good option for me but I need to do some more research on it to make sure it is actually a certification an employer would actually care about.
     
  10. atp1916

    atp1916 [H]ard|DCoTM x1

    Messages:
    3,680
    Joined:
    Jun 18, 2004
    I'd develop a portfolio of apps that demonstrate solving "problems" using technical solutions of your choice stack.

    Put it all up on Github, or similar.

    Nothing speaks more to a dev's ability than the code they produce, at least initially.
     
  11. JVene

    JVene n00b

    Messages:
    15
    Joined:
    Apr 25, 2019
    It's all good!
     
  12. JVene

    JVene n00b

    Messages:
    15
    Joined:
    Apr 25, 2019
    Excellent point!

    One of the more impressive type of applicants I interview are the ones with example work to show.

    Indeed, without that when I was 19 (several decades ago), I offered to write one application for free as an example. That was for the fortune 500 client. It worked. By the time I was 20, I was pulling in $50K, which in 1983 dollars is the equivalent of a 6 figure income today.

    THAT's the exact kind of thing I hoped you'd do. I have no experience with udemy, and it's been years since I've read introductory texts. I found the "Learn C++ in 21 days" and "Idiots guide to..." or the "Visual Studio Unleashed" books quite good general introductions, but that's been a long, long time ago. They all follow a similar formula.

    Check, because I have reason to think you'd only need 2 years, not 4, and that might let you work that in as a part time rather than full time student.

    Java & C# share a basic underlying syntax with C++. The design of both was influenced heavily from C++. They're also a bit easier and safer, and a survey may well find more jobs available for Java and C#, because C++ tends toward more ambitious and advanced targets (CAD engines, physics engines, Photoshop plugins).

    That said, there are times when C# or Java must interface with C++ code (and the reverse). For me, this means that although I'm focused on C++, I do find requirements where C# or Java are required, and one application may weave back and forth between these languages. That's typical of Android, iOS applications.

    I point this out because of one point regarding the study I think anyone on your path should consider, and I post this from the perspective of education on the subject more generally.

    Java and C# are popular languages for teaching, primarily because they're easier and "safer". C++ is a nasty language, because it is more complicated, and more easily generates strange bugs, and gives the programmer deeper, more direct access to the underlying hardware. It is a wonderful, fantastically powerful, fast language.

    What I observer, though, is that students starting out in Java or C# learn from the perspective of a simpler, safer environment. They get used to it. If the pick up C and C++ later, with considerable knowledge in mind already, the find C++ quite objectionable. Many even reject it.

    Those who started out in C++ have already been through a tough climb. They're accustomed to complexity, lots of tedium, associated with all the additional power the language brings. When such a student then learns Java or C#, they feel it's a smaller, simpler language that just isn't as powerful, or fast. There are lots of circumstances where building software in Java or C# will seem like being stuffed into a phone booth. There's so much one can't do.

    This creates quite a religious level of opposition among teams where mixed language targets are involved (which isn't common in, say, corporate environments). Mixed language targets would appear in mobile applications, high performance servers (like a database engine) that also offers user expansion (through C# or Java), or something like writing Visual Studio (where the core is in C++, but lots of the outer layers are in C#).

    My underlying point here is that one's origin impacts their viewpoint. I don't recall ever meeting someone who started out in C# or Java actually liking C++. Nor do I know many who started in C and C++ moving into Java or C# because they preferred it.

    Then, there's Javascript.

    It has nothing do with Java, BTW. There may be a loose resemblance, but it is only because Javascript is also influenced by the syntax of C++.

    Javascript, you may know, is the language for the browser. In some ways it is like VBA, though VBA's syntax is not influenced by C++. It is like VBA in that you generally use the language as a means of automating something else, like Excel or the browser.

    Javascript is one place most programmers can agree. It's just horrible. One of the biggest errors in the entire industry. We're stuck with it, because all attempts to remove it have failed, for decades.

    Javascript has been used in a way I'd analogize to turning a riding lawnmower into a race car. It was originally intended to script web pages for 'rollover' highlights on links, or to create some minor dynamic content (appearing as the result of pressing a button or something). Soon, however, people started using it to make web pages work more like software. I found that funny because software began to attempt user interface designs that more resembled web pages (based on the emerging fact that everyone now knows how to use a web page)

    Soon after, Javascript was pushed, like a V8 engine squeezed onto a John Deere, to create full blown "web applications".

    Thus, you may not only find employment performing this self torture, but it's a thing - a specialty. Debugging is awful, development tools are awful, the platform model is awful (and fragmented - what works on Mozilla doesn't work the same on Edge), the language isn't really helpful (Javascript), and it's slow (because it's an interpreter). All of Facebook, including the games, basically runs on it (on the client side, there's an entire server side that's probably written in mixed languages).

    I can say this, though. If you know Java or C#, Javascript is trivial to learn.

    One of the things I still grapple with, though, is the "what language am I in" mental effect. I'm a typical American in that I only speak American style English. My wife is from Colombia (she became a citizen 20 years ago, I was delighted to witness her swearing in). She learned English at a University in Florida in her first year in the US, and speaks (and understands the rules of) English better than I (some idiomatic expressions aside). My Spanish is limited to that vocabulary I should never have learned. I could start a bar fight, but I couldn't apologize for it. Now and then I catch my wife speaking on the phone in Spanish, then she'll turn to me to ask a question and continue in Spanish without realizing what language she's speaking. I've even understood just enough, by context or sign language, to respond in English, and she'll still continue to speak to me in Spanish, again without realizing it.

    I have that same thing writing software. When I've had to work in C# for a while (notice my lamenting tone), switching to C++ can take me a moment. It can be really tough when the languages are quite similar at the fundamental level. In C#, for example, the 'public' keyword is used on each and every variable declaration that should have it (like a table of contents). In C++, the public keyword appears at the beginning of a section that should be public, but not used on every declaration. Sometimes I try the wrong approach when I switch back and forth.

    Due to this, I recommend you focus on one language at a time for a while during your early learning phase. If you do branch into C# after you've started Java, for example, take some effort to keep the study separated in a schedule. If you blend the two as a study, don't drop one for a week. It will come back to you quickly, but you'll have an adjustment period where you find yourself "doing it like C#" when you're working in Java. I'd go so far as to customize your editor with unique background color. I use a very dark blue (almost black) with nearly white/slightly cyan text (for the most part) in C++, but for C# I use a much lighter shade of violet as the background. This gives you a subliminal signal of what language you're working on at any one time. The mind shifts gears more easily with such subtle environmental shifts.
     
    GoldenTiger likes this.
  13. Mattyb085

    Mattyb085 n00b

    Messages:
    6
    Joined:
    May 15, 2019
    Thanks for the advice, I probably am better off starting with C++ when you put it that way. There are quite a few C++ courser on there also and I haven't had much time to get into the other ones besides installing the software & doing very basic stuff so now would be the time to switch!
     
  14. JVene

    JVene n00b

    Messages:
    15
    Joined:
    Apr 25, 2019
    I've developed an interest in this 'life-moment' you're approaching. I have this unfortunate habit of joining a forum, sending a few of these sorts of replies out, and then getting busy for a while and forget what forum or who I was chatting with. I've had some rewarding experiences with such acquaintances from around the world, and I regard it as one of those few really great things the Internet has made possible. So, just in case I'm about to fall off the edge of cyberspace, I thought I'd drop a few gems here.

    I suggest you save a copy of this on your computer as a text or doc file, so you can recall the titles or sites I'm about to describe.

    If you're in Windows, get the free (Community Edition) of Visual Studio (select C++ option(s) for install). If you're on Mac, there is a Visual Studio for Mac, but I don't know if it is anything actually similar. If I were on a MAC, I'd install a virtual machine of Windows so I could install the Windows version of Visual Studio. It's that good.

    Learn to use the debugger as a tool to watch a program operate. It is probably the most effective way to walk through a program, one step at a time, while the program is actually executing (at very slow speed you control). This can make it clear, especially in the early phase of study, how these things work when you make them (or copy examples).

    For self study, I know it's tempting to use web tutorials, and I assume there are some good ones but I have no idea. My tutorial days for beginning C++ were in the 80's. However, for continued self study there are some books that are spectacular (and some that are merely ok) you should consider to flesh out what the web might not teach you (or teach you that well).

    I've not read any of these in many, many years, but any of the books in the series (paraphrasing the titles) "Teach yourself C++ in 21 days", "C++ Unleashed (or something similar)", "C++ for Dummies (despite the insulting title)" were worthy run-throughs on the basics. You certainly won't learn professional techniques, and they may be very limited on good design techniques, but the one thing they do well is give you a tour, with examples you can try. Not much is to be expected, but you actually want a small expectation at first try.

    The next, for beginners, is Bjarne Stroustrup's "Programming - Principles and Practice using C++". It is intended as a textbook of sorts for a course at Texas A & M. Stroustrup taught there for a while, and he's the person who "invented" the C++ language. Later, if you want to really know what you're doing, read every book he published since 2011 (there's only a few). He has some that are much older, but are either outdated (they've been released in new editions since 2011), or they're about the history of the language's origins (which is interesting and informative, but hardly what you're looking for). The book "The C++ Programming Language (now 4th edition) is about 1300 pages, and should be considered a reference work that is narrated. It is about as detailed as the formal technical work known as the C++ Standard (which formally describes the C++ language the way 'blueprints' describe a building). You will not find this book interesting until later, when you want deeper insight and to discover anything you might not have covered elsewhere.

    Another author you should read when you're intermediate to advanced is Herb Sutter, who partners with Stroustrup on this excellent resource: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

    There are other "C++ Primer" texts of excellent value (a deeper, formal, full version of the "Teach yourself" kind of books above).

    When you get to intermediate stage you'll be introduced to the standard library which includes the STL (standard template library). The STL itself is the subject of maps (binary trees that store data in sorted order), vectors (a container of objects that can be referenced by index - a number, like 'get the 4th' entry, or sorted and searched very fast), unique_ptr and shared_ptr ('automatic' or controlled memory management). For a full deep dive into this subject you'll want to get Josuttis's book "The C++ Standard Library - A Tutorial and Reference". It most recently was published for C++11, but he may update it soon (or has and I just haven't noticed).

    For any of these named works, look for the most recent edition. The language changed substantially over the years, and some corrections were made.

    The somewhat scientific(ly oriented) subject of data structures and algorithms will be of significant interest beyond your intermediate study.

    One of the simplest data structures is an array, which you'll encounter in early study. In memory it appears as collection of integers (or floats, or whatever) one after the other, each at a fixed size. If the size is 10, the second entry starts at the 11th byte, the third entry starts at the 21st byte, and so on. While there are lots of algorithms that apply to arrays (like sorting with the 'quick sort' algorithm), an array can be used by itself without much of any kind of algorithm other than accessing the "nth" entry in the array.

    Sorting theory gets deeper than you'd expect. Fortunately, from the books above and the path you're on, you won't actually have to understand how sorting works if you're never curious, because the tools and languages are advanced to the point that you have, in C++ in particular, tools to perform sorting in the standard library. It was not always so easy, though. There are several 'classic' sorting algorithms in the science (one specifically designed for the now ancient reel-to-reel tape storage you see in old movies).

    Sorting and searching are related. Searching, too, is found in the library. It is fascinating as a study (it takes maybe a few weeks), but is part of the larger subject of algorithms (as in the many, classic algorithms known to perform best at specific tasks, not just the code we write).

    Sometimes a data structure and an algorithm must be combined to even work.

    A binary tree, for example, is a complex data structure that, if you could see it, would actually look like the branching structure of a tree, where each endpoint is leaf holding one entry of the data it stores (it's a container). This structure can't even be created without the algorithms required to add data to it, and can't be used without algorithms that can list it's contents in order or search it. It's a powerful data structure with lots of interesting uses. Fortunately, the STL offers this as a completely automated feature called the "map". A computer science student will have to learn how things things work, but a programmer can get by without ever knowing it more than what I've just told you plus how to use the stl's map.

    Since the standard library comes with the compiler (and is generally made to fit to it specifically), you have considerable leverage at the start. But there's at least two or three more you'll want to know about for later (intermediate level, perhaps a few months from start).

    It's called boost (or the boost library - Google knows it well). Boost has been quite influential over the years. It is an open source library tended by lots of luminary engineer/scientist (a blend) types who create fascinating tools. Long ago, for example, C++ had no built in automatic pointers. When Stroustrup released C++ 2.0 (or was it 3?) back in the late 80's/early 90's, it was the first time we could make these automatic, or "smart pointers" in C++, and everyone who understood the concept made this as their first personal tool. Boost made one for their library, and after a few years of public use and rework, it was so good it became part of the C++ language itself. What we now call "shared_ptr" was from boost.

    Boost has contributed a number of libraries that were once curious addon's you could pick up if you needed, which have become so powerful and reliable that they, too, have become part of the C++ standard library (which is considered a part of the language itself in a way). One of them is Asio, a way of handling internet connections. There have been many such libraries, but few have demonstrated the power to create high end server quality backbones like Asio can. Asio's invitation to the C++ standard library is quite recent (like last year), though I first used it years ago.

    So, visit Boost's website for a browse, but wait to get it until you're intermediate. Some of the libraries are "header only", which means they are trivial to install and use, but some require a build process that a beginner would find confusing.

    If you intend to write in C++ for cross platform (and, at this point, it makes no sense to ever write a program that only works on one operating system), you'll need to know about two libraries (you use only one or the other). One is Qt (pronounced cute), and the other is WxWidgets. I prefer WxWidgets myself, but many prefer Qt (and when they do, they're very devoted to it).

    Both are libraries supporting the creation of GUI applications on at least the main three operating systems from one body of code. The library handles the issue of mating your code to whichever operating system you build for, so you can target MAC, Linux and Windows from one body of source code (and a few minor tweeks to customize, if you want).

    Qt is a tad peculiar, but advanced. I don't use it myself, but some high end products use it. I build plugins for 3DS Max on occasion, and they use Qt (in the recent version).

    Qt, however, is dual licensed. There is a free version, but unless they've changed the license and I didn't hear about it, 'free' is limited. In the past it was 'paid only'.

    WxWidgets, however, is free, and has been since creation. For about 99% of what you really do with 'widgets', it is on parity with Qt in form and feature. Qt tries to be all things everywhere, and gets most of it fairly right, but it is a bit duplicative as a result. Some of what Qt provides are basically duplicates of the standard library. 'Widgets', however, has one advantage, in my view (beyond being free) - it functions natively on each of the 3 main target operating systems. Qt 'paints' all of it's controls (the buttons, sliders, controls, etc). In theory this means Qt can 'skin' the application to look any way you like, and perhaps you could make a program running on a Windows machine look the way it does on a Mac. The downside is that it's a bit 'heavy' on the computer by comparison. WxWidgets uses each OS native controls, so they're more efficient. Both are reliable, and professional products are based on them.

    For years, Microsoft offered their own framework for making Windows applications (and only Windows) called MFC. That's about all I like saying about it because, frankly, it's not that good. They also offer ATL, but I'm no more enthused. They make only Windows applications, and while that was, long ago, the way it was done - it makes zero sense in the modern era. Both, however, are considered reliable tools (in that they don't usually crash).

    One last subject. Templates. One of the things Stroustrup did around 1990 was to introduce what he calls parameterized types. You can write code to perform a function that can automatically adapt to different types you request later. For example, a function that sorts can be made a template function so that it can be used to sort integers, floating point numbers, strings or more complex structures (like last/first/middle name). Templates form the backbone of the STL. However, in C++ 20, Stroustrup has introduced something that puts new meaning and much simpler coding into templates called 'concepts'. Only one compiler (gcc) can compile concepts as of today, but very soon they all will. When they do, and you've begun studying templates, you'll want to search for updated texts and web tutorials on the subject of 'concepts', especially anything Stroustrup writes about it (it's one of the new parts of the language he almost exclusively created in these last few years). It was supposed to be in C++17, but rather than implement it by then, he decided to wait to perfect it. He regards it as one of his best achievements, and if he's correct (which is quite likely) then you'll be way ahead by studying it (and updating your compiler(s) for it) as it becomes more widely available. GCC is a good compiler, but it isn't associated with the best development tools (IDE's like Visual Studio), and is no longer used by MAC or Android (it once was). They both use LLVM/CLang now.

    Best of luck!







    One specific note - if you get an older book (they're fine) from around 2011, there was a little error called "auto_ptr". It was a good idea, but with some bad mistakes. Some books may refer to it, but remember that I've told you not to use it, and instead realize that it was replaced with unique_ptr. Unique_ptr does what auto_ptr was intended to do (and what auto_ptr seemed to do at first), but then serious issues were realized in the field. Wherever a book may mention auto_ptr, replace the notion with unique_ptr and forget auto_ptr. It's the one thing that went wrong in this way.