Page 1 of 2
Lost in the world of software development
Posted: Sun Aug 07, 2011 6:11 pm
by Kyosaur
Im currently at an intersection when it comes to programming, and i have to pick a direction. Sadly this direction isnt as easy as picking one of two graphics libraries, i have multiple choices that lead to more intersections, and that just confuses me even more! I've been stuck for a while, and i've put it off long enough, its time to make a decision.
To make this more fit for my situation im going to give a little bio about myself.
Bio: Im 19 years old, and currently use C++ as my main programming language. Im not exactly sure what i want to do with my life, only that i want it to involve programming. At the moment im really only comfortable putting one thing on my resume and that's a 32bit typeless scripting language called PAWN. Im OK in C++, i have a strong understanding of the language, but no GUI library/API to make any of that of use (hence me not being comfortable enough to put it on my future resume). Im currently leaning towards software development (and/or engineering - i love making kick ass designs!) so not having any GUI lib/api under my belt is a big deal; I do however have SQL experience (Mostly the basic statements: SELECT, INSERT, UPDATE, CREATE, DELETE, DROP, etc...).
[/EndBoringBio]
Now here is where the root of my confusion begins. Since i think it will be to difficult to explain, im just going to make a list to try and demonstrate instead.
- C++ - People keep telling my its not wise to stick with this language if my goal is software development. They tell me JAVA and C# are the industry standards, and encourage me to learn those instead. I REALLY like c++ and would like to stick with it if at all possible. I like that i can code ANYTHING i want with it, and chose HOW i code it (<3 multiparadigm languages). The speed and power are the main reasons i love this language though.
Paths available with C++ (pros and cons):
- - Qt
- Pros:
- 1.) No need to worry about platforms, its completely cross-platform. This saves a ton of time and money to companies.
2.) If i learn Qt for C++, i can learn JAVA and add it to my resume since there is a Qt port for JAVA! Learning java itself its that big of a deal, as im already comfortable with object oriented programming.
3.) Qt has a GUI builder that comes with their IDE. Although the IDE is terrible in my opinion, the creator saves tons of time and makes life very easy.
Cons:
- 1.) Since the goal of Qt is to keep everything platform independent i'd have to use a TON of libraries to keep code platform independent-since i cant just use Win32 functions.
2.) Companies might not be fond of paying for this library (or using other people's work in general?). That inclines people to use other methods - meaning less employers?
- Win32 API
- Pros:
- 1.) Since platform independence isnt a factor here, i can use the vast amount of functions that comes with the API (limiting the amount of third party libraries i have to use).
2.) No fee to keep your source code private.
3.) This makes learning assembly less of a hassle. I could make full fledged programs instead of just using inline assembly in my C++ programs (this also gives me another language to add, if i ever get a good enough understand of assembly-atm its just an interest).
Cons:
- 1.) For some unfathomable reason the API uses Hungarian notation. This makes the code incredibly ugly for absolutely no reason (especially with modern IDE's).
2.) Employees will possibly have to hire other coders if they want to port their stuff, or will be JUST have to developing for windows (i assume they'd JUST develop for windows).
JAVA - Im not to big on JAVA to be quite honest. I find it extremely limiting as im not able to pick my style of programming (Some times procedural just makes more sense than OOP!). Also i feel as if i learn java and get hired as a java programmer, i'll have no need for c++, which is very sad (i love the language). The only thing i like about java is that it multi-platform (no need to recompile due to the JVM, just compile and distribute). There are a ton of places looking for JAVA programmers, having it on my resume makes me feel comfortable- even though i would hate being a java coder.
- - Swing
- Pros:
- 1.) The great thing about swing is that its all inside the language! No need for any third party libraries at all.
2.) There's probably a huge market out there for swing coders due to the above.
- Cons:
- 1.) Swing seems very messy and unorganized. I think this is due to its age. Having events in your application is seriously frustrating due to this.
- - Qt
- Pros:
- 1.) Qt seems to be a very nice alternative to swing. It seems more organized and handles everything with a more modern approach.
2.) If i learn Qt instead of Swing, thats sort of killing two birds with one stone. I can also list myself as a C++ programmer using the Qt library.
- Cons:
- 1.) JAVA is already significantly slower than C++, using Qt means my applications will be even slower since Qt for java is a wrapper.
2.) There's a fee to keep your source private.
Which route do you guys think is the best one for me to take? It seems every route has a serious down side with it :\.
Re: Lost in the world of software development
Posted: Sun Aug 07, 2011 6:18 pm
by Falco Girgis
Uh, I mean no offense, but none of your CONS for QT were valid.
Kyosaur wrote:1.) Since the goal of Qt is to keep everything platform independent i'd have to use a TON of libraries to keep code platform independent-since i cant just use Win32 functions.
?
QT
is platform independent. Every function it offers will run identically on each platform. If you use QT, you don't need a single additional library.
Kyosaur wrote:2.) Companies might not be fond of paying for this library (or using other people's work in general?). That inclines people to use other methods - meaning less employers?
I don't understand what you're trying to say. QT is covered under the LGPL, meaning that it's free to use commercially provided that you don't fuck with the source code (and if you do, it must be released).
We use QT quite a bit at work (as do tons of other companies) for proprietary products... We're actually using it to power the software running an IP phone we've designed from ground-up.
My C/C++/QT experience with my senior design project is actually what landed me my first legitimate software engineering job.
I have dabbled in both Java and C#. I'm very experienced in QT. Everything that I've ever pursued in QT has been a pleasure. It offers the power and speed of C++ (you can still even link against C libraries and drop to the assembly level if you need to) with the high-level constructs that make writing software in Java/C# appealing. It's honestly the best of both worlds, imo.
Re: Lost in the world of software development
Posted: Sun Aug 07, 2011 6:33 pm
by Kyosaur
GyroVorbis wrote:Uh, I mean no offense, but none of your CONS for QT were valid.
Kyosaur wrote:1.) Since the goal of Qt is to keep everything platform independent i'd have to use a TON of libraries to keep code platform independent-since i cant just use Win32 functions.
?
QT
is platform independent. Every function it offers will run identically on each platform. If you use QT, you don't need a single additional library.
Kyosaur wrote:2.) Companies might not be fond of paying for this library (or using other people's work in general?). That inclines people to use other methods - meaning less employers?
I don't understand what you're trying to say. QT is covered under the LGPL, meaning that it's free to use commercially provided that you don't fuck with the source code (and if you do, it must be released).
We use QT quite a bit at work (as do tons of other companies) for proprietary products... We're actually using it to power the software running an IP phone we've designed from ground-up.
My C/C++/QT experience with my senior design project is actually what landed me my first legitimate software engineering job.
I have dabbled in both Java and C#. I'm very experienced in QT. Everything that I've ever pursued in QT has been a pleasure. It offers the power and speed of C++ (you can still even link against C libraries and drop to the assembly level if you need to) with the high-level constructs that make writing software in Java/C# appealing. It's honestly the best of both worlds, imo.
1.) Sorry i wasnt as clear as i could've been. I wasnt referring to the UI side of things, i was referring to WHAT the code does. Since i cant use any window specific functions (which to be honest is all i know - and even that is limited) i'd have to use alot of libraries in order to keep MY code multi-platform (not sure how companies view this, i assume its not desirable).
2.) Oh now thats a problem on my side, i misunderstood the licenses (been ages since i've read it).
Honestly i feel you on that. Im very interested in Qt, im just worried about maintaining cross compatibility with MY code like i said.
Re: Lost in the world of software development
Posted: Sun Aug 07, 2011 6:55 pm
by Falco Girgis
Kyosaur wrote:1.) Sorry i wasnt as clear as i could've been. I wasnt referring to the UI side of things, i was referring to WHAT the code does. Since i cant use any window specific functions (which to be honest is all i know - and even that is limited) i'd have to use alot of libraries in order to keep MY code multi-platform (not sure how companies view this, i assume its not desirable).
No, you wouldn't. QT literally does everything you would ever need to do for you and in a platform independent manner. You won't need a single additional library other than the QT framework 99% of the time.
I don't really think you understand how QT works. The entire point is that you DON'T need to use anything additional or need to worry about things being cross-platform. If you use the built-in QT functionality, it's handled for you. That's the entire point.
Re: Lost in the world of software development
Posted: Sun Aug 07, 2011 7:17 pm
by Kyosaur
GyroVorbis wrote:Kyosaur wrote:1.) Sorry i wasnt as clear as i could've been. I wasnt referring to the UI side of things, i was referring to WHAT the code does. Since i cant use any window specific functions (which to be honest is all i know - and even that is limited) i'd have to use alot of libraries in order to keep MY code multi-platform (not sure how companies view this, i assume its not desirable).
No, you wouldn't. QT literally does everything you would ever need to do for you and in a platform independent manner. You won't need a single additional library other than the QT framework 99% of the time.
I don't really think you understand how QT works. The entire point is that you DON'T need to use anything additional or need to worry about things being cross-platform. If you use the built-in QT functionality, it's handled for you. That's the entire point.
Oh, that is fantastic! I thought it was a framework that just handled the UI side of things (with events for said UI controls). That makes this decision VERY easy!
Honestly i read the about section on Qt, and looked at some code examples and thats about it. I havent played with it at all, so i was unaware that it did more than just UI related things. Thanks for taking the time to respond, now choosing Qt is honestly the only logical choice :D.
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 12:29 am
by short
Kyosaur wrote:
Oh, that is fantastic! I thought it was a framework that just handled the UI side of things (with events for said UI controls). That makes this decision VERY easy!
Honestly i read the about section on Qt, and looked at some code examples and thats about it. I havent played with it at all, so i was unaware that it did more than just UI related things. Thanks for taking the time to respond, now choosing Qt is honestly the only logical choice :D.
As an example, I wrote an entire video playing application for my senior design project in Qt, for a mobile device. Everything from reading the .wmv file to displaying it on the screen (they even have libraries that take care of all that, but that wouldn't be much a senior project, would it?))
Qt is powerful.
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 4:41 am
by ismetteren
Kyosaur wrote:Im currently at an intersection when it comes to programming, and i have to pick a direction. Sadly this direction isnt as easy as picking one of two graphics libraries, i have multiple choices that lead to more intersections, and that just confuses me even more! I've been stuck for a while, and i've put it off long enough, its time to make a decision.
To make this more fit for my situation im going to give a little bio about myself.
Bio: Im 19 years old, and currently use C++ as my main programming language. Im not exactly sure what i want to do with my life, only that i want it to involve programming. At the moment im really only comfortable putting one thing on my resume and that's a 32bit typeless scripting language called PAWN. Im OK in C++, i have a strong understanding of the language, but no GUI library/API to make any of that of use (hence me not being comfortable enough to put it on my future resume). Im currently leaning towards software development (and/or engineering - i love making kick ass designs!) so not having any GUI lib/api under my belt is a big deal; I do however have SQL experience (Mostly the basic statements: SELECT, INSERT, UPDATE, CREATE, DELETE, DROP, etc...).
[/EndBoringBio]
I don't know how far you are in the education system and how stuff works where you are from, but if you aren't on university level, then what about just taking it a little easy. To be honest I'm not really an expert when it comes to this(since there's still a few years until I'll start on a tertiary education) but I'm quite sure the idea is that you're supposed to learn stuff while you are there, and not before. Off course having some experience with different stuff is always good, the more the better, so just play around with a lot of different stuff. Something that you find interesting so you can keep the motivation.
And if you are really good at programming, then learning a GUI library shouldn't be that big of a deal, especially if you already have experience with one in a similar language. I haven't used Qt myself, but i know it's quite comprehensive. That doesn't mean that if you decide to learn Qt now you have to stick with it the rest of your life. Knowing several different GUI libraries for different languages is possible.
As I said earlier, I'm not talking from experience, just from how i think it is(where i live), so I might be completely off
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 9:27 am
by Falco Girgis
Pft. DON'T take it easy on yourself. Don't rely on school to teach you things (because it won't teach you a tenth of what you want to learn). Don't ever stop pushing or fighting to better yourself when it comes to your potential. There is nothing nobler than striving to be better. Be your own teacher and take a proactive stance on your education. That's the only way to make it in a field as large as this one.
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 11:03 am
by Falco Girgis
I also did the entirety of my senior design project in QT (which also landed me a job as a software engineer).
We built a Lunar rover software development suite to add semi-autonomy to existing rovers. It consisted of two pieces of software. A host (running on the rover) and an OCU (which was built out of the Elysian Shadows Toolkit serving as a remote host). It was heavily multithreaded, used the shit out of TCP/UDP sockets, streamed video and sensor input data between the two, and ran on my Macbook pro, Windows, and Ubuntu Linux (and fuck knows what else).
Many of the sensor drivers that I was interfacing with had standalone C libraries that I had to link against and utilize within a QT paradigm.
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 2:08 pm
by xx6heartless6xx
I currently have a VERY simple tile level editor. I want to add buttons and drop down menus, etc and Qt seems like a pretty good application to create a good GUI with.
How is the process switching to using Qt? Would I need to completely rewrite my code in Qt using their functions?
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 2:28 pm
by Falco Girgis
xx6heartless6xx wrote:I currently have a VERY simple tile level editor. I want to add buttons and drop down menus, etc and Qt seems like a pretty good application to create a good GUI with.
How is the process switching to using Qt? Would I need to completely rewrite my code in Qt using their functions?
Nah, not really. It's not like you can't still use all of the C and C++ standard libraries. Those are cross-platform by nature. It's just the SDL/Allegro/OpenGL parts that are going to need to transition to the QT framework (I don't know what you're currently using). QT even supports OpenGL-based widgets, so even that may not have to change.
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 2:51 pm
by Kyosaur
ismetteren wrote:Kyosaur wrote:Im currently at an intersection when it comes to programming, and i have to pick a direction. Sadly this direction isnt as easy as picking one of two graphics libraries, i have multiple choices that lead to more intersections, and that just confuses me even more! I've been stuck for a while, and i've put it off long enough, its time to make a decision.
To make this more fit for my situation im going to give a little bio about myself.
Bio: Im 19 years old, and currently use C++ as my main programming language. Im not exactly sure what i want to do with my life, only that i want it to involve programming. At the moment im really only comfortable putting one thing on my resume and that's a 32bit typeless scripting language called PAWN. Im OK in C++, i have a strong understanding of the language, but no GUI library/API to make any of that of use (hence me not being comfortable enough to put it on my future resume). Im currently leaning towards software development (and/or engineering - i love making kick ass designs!) so not having any GUI lib/api under my belt is a big deal; I do however have SQL experience (Mostly the basic statements: SELECT, INSERT, UPDATE, CREATE, DELETE, DROP, etc...).
[/EndBoringBio]
I don't know how far you are in the education system and how stuff works where you are from, but if you aren't on university level, then what about just taking it a little easy. To be honest I'm not really an expert when it comes to this(since there's still a few years until I'll start on a tertiary education) but I'm quite sure the idea is that you're supposed to learn stuff while you are there, and not before. Off course having some experience with different stuff is always good, the more the better, so just play around with a lot of different stuff. Something that you find interesting so you can keep the motivation.
And if you are really good at programming, then learning a GUI library shouldn't be that big of a deal, especially if you already have experience with one in a similar language. I haven't used Qt myself, but i know it's quite comprehensive. That doesn't mean that if you decide to learn Qt now you have to stick with it the rest of your life. Knowing several different GUI libraries for different languages is possible.
As I said earlier, I'm not talking from experience, just from how i think it is(where i live), so I might be completely off
I've taken a few general education classes in college and thats about it. I messed around and pretty much partied through high school, so i HAVE taken it easy :P. Now its time to get shit done.
I know learning a UI library isnt that difficult, but i dont like wasting time with choices that will only end up hurting me. Since Gyro explained how much this library does, i FINALLY had an option that had absolutely no down sides- exactly what i was looking for. I dont like saying i know something until i've spent a long time with something, know how it works, and can make use of it in the real world. Learning another UI library would've taken a lot of time, time that could've been better spent learning something else.
GyroVorbis wrote:Pft. DON'T take it easy on yourself. Don't rely on school to teach you things (because it won't teach you a tenth of what you want to learn). Don't ever stop pushing or fighting to better yourself when it comes to your potential. There is nothing nobler than striving to be better. Be your own teacher and take a proactive stance on your education. That's the only way to make it in a field as large as this one.
Exactly! Honestly i've always been a fast learner and hated school due to this reason. Most of my time in high school was spent fucking around (+partying) and waiting for the lesson plan to catch up to me. This was a lot of time that could've been spent helping me further my education :\. Im definitely big on the idea of learning at my own pace and not waiting on a group!
I jumped balls deep into Qt, and i gotta say ... i love it :D.
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 3:03 pm
by xx6heartless6xx
GyroVorbis wrote:xx6heartless6xx wrote:I currently have a VERY simple tile level editor. I want to add buttons and drop down menus, etc and Qt seems like a pretty good application to create a good GUI with.
How is the process switching to using Qt? Would I need to completely rewrite my code in Qt using their functions?
Nah, not really. It's not like you can't still use all of the C and C++ standard libraries. Those are cross-platform by nature. It's just the SDL/Allegro/OpenGL parts that are going to need to transition to the QT framework (I don't know what you're currently using). QT even supports OpenGL-based widgets, so even that may not have to change.
Well I'm using SDL and using the SDL functions to load images and using SDL events as well for keypresses, mouse clicks, etc. I guess I can't then copy and paste my code and then just add to it with the Qt stuff. So I can still keep my code but I just need to convert some of code from SDL to Qt like the way it loads images and mouse clicks?
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 3:08 pm
by Falco Girgis
xx6heartless6xx wrote:GyroVorbis wrote:xx6heartless6xx wrote:I currently have a VERY simple tile level editor. I want to add buttons and drop down menus, etc and Qt seems like a pretty good application to create a good GUI with.
How is the process switching to using Qt? Would I need to completely rewrite my code in Qt using their functions?
Nah, not really. It's not like you can't still use all of the C and C++ standard libraries. Those are cross-platform by nature. It's just the SDL/Allegro/OpenGL parts that are going to need to transition to the QT framework (I don't know what you're currently using). QT even supports OpenGL-based widgets, so even that may not have to change.
Well I'm using SDL and using the SDL functions to load images and using SDL events as well for keypresses, mouse clicks, etc. I guess I can't then copy and paste my code and then just add to it with the Qt stuff. So I can still keep my code but I just need to convert some of code from SDL to Qt like the way it loads images and mouse clicks?
Yeah, exactly. Essentially anything having to do with rendering/input will need to change. Everything else (your auxiliary functions) will probably be fine the way they are.
Re: Lost in the world of software development
Posted: Mon Aug 08, 2011 3:25 pm
by xx6heartless6xx
GyroVorbis wrote:Pft. DON'T take it easy on yourself. Don't rely on school to teach you things (because it won't teach you a tenth of what you want to learn). Don't ever stop pushing or fighting to better yourself when it comes to your potential. There is nothing nobler than striving to be better. Be your own teacher and take a proactive stance on your education. That's the only way to make it in a field as large as this one.
What have you gotten out of your college education with a computer engineering degree? It seems you learned most of the things you know by yourself and not learn as much from school.