need advice

Hi guys,

so I've been programming on and off for about 3 years now or maybe a little longer, but to be honest I've never made anything I can reflect on and say that was a successful project that either changed my life or changed the lifes of other people or even a project I can look back at and say that's pretty cool. The "biggest" project I've ever worked on was a library program, this program was a GUI tool that kept track of a users book collection, the user had options to add a book to the library, search by author or ISBN or name of the book and also rate it. This information was stored in a database using mySQL as the database language. The program was built in Java and was designed using a model view controller pattern.

I know this is quite a vague question but what do I really need to know to actually start building useful applications that would land me a developer job or give me the experience to get said job?

I would like to think I have a semi decent understanding of the C++ language and I can write trivial programs with ease, such as the questions you would see on codechef or questions in programming books.

I have a good understanding of the following - iteration,recursion,polymorphism, inheritance, data structures such as vectors,binary search tree, linked lists, classes , pointers , etc etc

could anybody give me some advice as to where I can go from here or what should I learn? is there any frameworks apart from QT that I could learn that is sought after or highly in demand? I'm not really interested in AI, but more so just general application building, I would like to build something like a web browser, or a program that adds effects to a webcam, a webcam to webcam networked application( such as an instant messaging chat between local computers on the same LAN, NOTE not through the web browser but lets say like a skype but much much simpler), if anybody could tell me what frameworks, topics etc I need to build these more functional applications I would be more than grateful, any links or sources would be a great start and general advice would also be perfect.

thanks
Last edited on
If you have a degree whats the problem?

Don't tell me you don't have a degree.

This shouldn't be in general, this should be in lounge.
@adam2016,

I come from a different era. My own early career began in '81, when I had something of the similar personal scenario you present.

I ended up diving into the deep end of the pool relative to the epoch. C++ didn't exist, even "the web" didn't exist, and so C was among the primary languages (but Pascal was still in vogue, too).

I landed contracts for hire, building software for various businesses, some (few) of which happen to still be in use (after several versions) to this day. I committed way over my head, but I was focused, determined, a bit desperate to make things work as a young, newly minted adult trying to afford all those basics of life.

It worked out, though, as I managed to build a reputation for delivering what I promised.

The main relative point here is that what I built was purpose built. It was based on specific needs of clients with moderate to complex, well defined intent. Eventually I landed a fortune 500 contract, which I kept for 9 years. Many of those things I built are really just the same sort of thing you mention - forgettable even if good. A few, however, managed to become "something".

One for was for a manufacturer. The short version is that through a bit of management of the resource, I was able to help control the flow of work through fabrication machines to improve productivity by double. That's one of the products still in use after 30+ years, though it was incrementally advanced a few times. It also became a product for that niche market.

Thinking upon your question, what I'm trying to convey is that the theory of how to write something must subordinate to what to write. Much like an author of fiction, it is one thing to know the language well, quite another to weave an interesting story.

Modern expectations require indepth efforts for genuinely meaningful products. The early software development epoch was much like the engineering of early aircraft or automobiles. The Model T was not the first car, but the first mass produced design. It was limited to 35 mph, mated well to the dirt roads over the majority of the nation. Once the roads were paved, 35 mph was too slow and 20 hp was too weak.

Now, while I'm a 50-something (heavy on the something), I'm not stuck in that past era where I started. The one thing I noticed early, and followed well, was change; rapid change; constant change.

Today I write for iOS, Android, Windows, Linux - anything with a CPU. I've worked in such diverse fields as robotic manufacturing, TV & film post production, architecture, physics engines, rendering engines, game engines and web servers.

Among the more enlightening tasks I've engaged in is open source development. Of course, that's not a job unless someone is investing, and therefore paying the programmer(s), to do that. For example, IBM started using Linux on their servers (they used AIX, a version of UNIX long ago), and so they put their own paid programmers to the task of contributing to the Linux source code.

Sony did the same for the Bullet physics engine.

Nothing stops students from volunteering, thus contributing to some seriously important software.

It also means you get the compartmentalization common to modern work. Hardly anyone single handedly develops large scale applications.

Then, there are games.

Game development is an all-in-one task. Too much in the modern era to start from scratch, so pick a game engine. Developing a game from zero to endpoint involves everything from programming to sound editing, music writing, sound effects generation, artwork, psychology....

...it also involves threading, memory management, high performance tuning, and more.

In that last point, among your skills you didn't mention threaded development - perhaps you skipped it (one's list can get too long easily), but focus upon it for study if you haven't taken a tour.

You mention Qt, and it is popular (and commercially more respected), but the one other framework of that level is WxWidgets. It is hard to say which would help "get a job", but both are worth the study because either are used. Some few products that started out on wxWidgets were moved to Qt. However, of the GUI frameworks that offer platform portable targets, these are "the" two. All others are either way behind, or "up and coming" - and who knows, one of them may end up taking over.

Both Qt and wxWidgets go way back, and so "suffer" from legacy design, while still being updated all the while. That is to say that both do too much in the modern C++ era.

For example, both have containers duplicating the STL containers, but then both predate the STL's wide acceptance. Both have components which duplicate many of Boost's libraries, and again come from a time before Boost was what it has become.

The tools for Qt may be slightly better, but then wxWidgets is largely assumed to be a library for whatever compiler(s) and IDE(s) you enjoy, whereas Qt tends to start with QtCreator and work outward from there.

I could suggest changing your view on AI, but maybe I'll just keep that for myself ;)

Building a web browser is self inflicted torture. It is an exercise in conforming to most or all of the conflicting standards from years past, and dealing with all sort of inane web programming it will try to render. From start to finish there are years of work involved. On the other hand, grabbing the source to a foundational kit (like that upon which Mozilla is based) means you can just adorn the existing browser with your own interfce notions.

You mention "adds effects to a webcam", so you may want to study on the more general topic of video processing, signal processing, image processing, etc. Don't be surprised to discover that since all the low hanging fruit was done already, you'll be forced to consider AI, because that is what is happening in that field now.

It sounds to me like you need to browse around for the open source projects and frameworks specific to these interests. There are frameworks just for video encoding/decoding, others for video playback, video processing (using GPU kernels for speed) - and you can learn from and develop atop them.

The deeper you dive in, and the more confused you get doing that, the more you'll have to learn to dig yourself back out.

It is a constant of this industry.

Even downloading and building the full complement of the Boost library can be quite a learning task if you've not done that before.

Even tinkering with simpler graphics rendering libraries and physics libraries is enlightening.

At some point you have sufficient skills to build anything, but you haven't actually built something at the limit of your current skillset. You've already learned a great deal, and you're aware of so much more, that study becomes an exploration, like that of finding and experimenting with an image library (one that does all that photoshop stuff from brightness/contrast to cropping/scaling, etc).

You may do well to consider membership in a book resource, like Amazon's unlimited Kindle, and the public library, and the rent-a-book service(s) associated with modern college. That way you can browse, skim and reject a lot of material to find what you want and need.

I've been excoriated for making this claim in the past, but frankly there's a bit of performance art in software development. It must be practiced. You have to "play" with it, tinker with it, apply it.

Lately I have volunteered to teach programming to the members of a robotics club at the local high school where my son just graduated. I didn't realize how much I knew about both robotics and mechanics relative to undergraduate study, as I've branched outward toward two local universities.

In other words, you'll bump into new application areas as you experiment and try things out.

Get an Arduino, maybe, if you'd like to write to control machines.

Scrap printers for their motors and build a robot.

The path depends on what really interests you.

I was a classically trained musician, so audio and music were logical directions for me, at one time.

write down every suggestion here and elsewhere on a little scrap of paper. Put them all in a hat and pull one out. that is what you need when you get a job at a place that uses that tech.

Every company has different coding styles, different libraries, different needs.
So if you just want 'a job' to pay the bills, or tech jobs are limited in your area, whatever --- there isnt any answer.

There are lots of ways to go at it. I would personally take a look at the job offerings in your area. Read them in detail. Many will say 'looking for a developer familiar with Xblah framework and jybberish technology using company's hoopajoos' and you now know that that company uses those things right now. Get a list, boil it down, go learn it (some of these things can be learned in a week or 2), start applying.

Another approach is to focus on an area ... what types of programs do you enjoy writing? Find out the technical name of that sub-field, then look up the popular tools in that area, and go dig into those. You may need to relocate to find your job, though. The fatal flaw here is that popular tools are often big $$ and many (mostly smaller) companies will have dodged that in favor of a knockoff or home-rolled solution. So if you are near smaller companies, this strategy can be risky.

The tech from a hat approach isnt recommended (but its kind of what you asked for). You have to tailor it yourself to meet your own career goals.
Last edited on
@Niccolo That's fascinating, you really do have a lifetime of experience. seems like programming has made you branch out into many other fields, game programming is something I tried mainly with SDL, I followed it for about 2 months but got pretty bored with it and found out it wasn't my cup of tea but with that being said I didn't close the book on it as I still may possibly get back into it and give it another whirl. and yes AI is honestly something that intrigues me but it looks quite complex, sometimes I think I may be in over my head contemplating the AI field and it probably takes a long long time to get a grasp of it. Looking at open source projects is a great idea something I've heard before but haven't tried and to be honest that's probably what I will do next :)

@Jonnin yes many job offerings specify you need a good understanding and experience using x or y framework, it may be worth looking at these jobs sitting down for a couple of weeks and trying to learn some of these frameworks or at least get to grips with some of them.

@Poteto I do actually have a bachelors of science in computer science, but why does that matter? many programmers and techies don't have degrees but hold much more knowledge and experience than people with degrees, it's 2019 degrees are not everything and just because you have one doesn't necessarily mean jobs will come easier.
Topic archived. No new replies allowed.