Jump to content

Help Getting into programming

bnevs99

Hello Ive really wanted to get into programming for a while now but ive had trouble getting into it. I beleive i have a good base knowledge on computer hardware and machine language but its really hard for me to get into it. Ive used resources such as Codeacademy. The things i would like to accomplish with programming is making maybe a simple game and useful tools for using my computer. Any help would be great on how to get interested 

Link to comment
Share on other sites

Link to post
Share on other sites

Why don't you learn C++ in Codeacademy?

c++ isnt on codecadmey

Link to comment
Share on other sites

Link to post
Share on other sites

c++ isnt on codecadmey

Really?

 

Have you tried Python?

Link to comment
Share on other sites

Link to post
Share on other sites

A simple game? Is it going to be text-based or visual?

Blue Jay

CPU: Intel Core i7 6700k (OC'd 4.4GHz) Cooler: CM Hyper 212 Evo Mobo: MSI Z170A Gaming Pro Carbon GPU: EVGA GTX 950 SSC RAM: Crucial Ballistix Sport 8GB (1x8GB) SSD: Samsung 850 EVO 250 GB HDD: Seagate Barracuda 1TB Case: NZXT S340 Black/Blue PSU: Corsair CX430M

 

Other Stuff

Monitor: Acer H236HL BID Mouse: Logitech G502 Proteus Spectrum Keyboard: I don't even know Mouse Pad: SteelSeries QcK Headset: Turtle Beach X12

 

GitHub

Link to comment
Share on other sites

Link to post
Share on other sites

Hello Ive really wanted to get into programming for a while now but ive had trouble getting into it. I beleive i have a good base knowledge on computer hardware and machine language but its really hard for me to get into it. Ive used resources such as Codeacademy. The things i would like to accomplish with programming is making maybe a simple game and useful tools for using my computer. Any help would be great on how to get interested

What you're looking for is motivation. YOU have to be motivated. Set good, specific goals for yourself. Then, make sure that you stay on track to reach those goals.

CPU: AMD FX-6300 4GHz @ 1.3 volts | CPU Cooler: Cooler Master Hyper 212 EVO | RAM: 8GB DDR3

Motherboard: Gigabyte 970A-DS3P | GPU: EVGA GTX 960 SSC | SSD: 250GB Samsung 850 EVO

HDD: 1TB WD Caviar Green | Case: Fractal Design Core 2500 | OS: Windows 10 Home

Link to comment
Share on other sites

Link to post
Share on other sites

Do you want to be a games developer? Is that what really drives you or attracts you to all of this? Because if it isn't and that's just an idea/preconception you have about 'programming' then knock it right out of your skull right now. Far too many kids come onto this forum trying to write games when they haven't even acquired so much as a basic grasp of, understanding of or even proficiency in a given language, or for that matter any concept of good software design or principals.

 

I'd also say don't bother with sites like Codecademy. In my opinion they are very much like interactive syntax text books... boring right? (depending on one's learning style of course) Don't get me wrong they can be good to teach the syntax, primitive types and basic flow control but all of that is offset again by the quick onset of boredom and they don't really go any further into what 'programming' is really all about.

 

I'm quoting 'programming' because it is or can be a very general term for some vastly different aspects of the field. Here's my take on it starting at the lowest end of the spectrum/food chain and working upwards:

 

Programmer

A grunt who follows orders to the letter. Think of this person as a mechanical component on a factory line. He/she takes in raw material in the form of instructions and outputs assembled components at the other end... They don't get paid for, much less posses the capacity for thought of design or the bigger picture of the software development process. They (should) know how to write well structured, clean and efficient code but that is as far as it goes.

 

Software Developer

Same as the Programmer but they get involved in the planning, design and architectural decision making process. Often involved in discussions with product/project management and usually is a pivotal team member who will often coordinate and/or mentor less experienced developers. This person also usually has one or two areas of very specialist domain knowledge.

 

Computer Scientist

R&D guys; they get play with all of the very cool toys and gadgets. They usually have very specialist and deep domain knowledge often including advanced mathematics/physics and so on. They tend not to get involved in production work as they are usually kept focused with the most bleeding edge research; the products of which are then sent to the developers/engineers for production integration. Job security can be a little worrisome as work often comes about in bursts/spikes (the bigger the company, the better this is though).

 

Software Engineer

Includes all of the Software Developer's responsibilities and is often also responsible for being heavily involved in the bigger picture or wider scope of the software development process; the whole wider orchestration of the design and project. Often they are more involved in wider reaching and more pivotal decisions. These individuals usually have a wider array of skills and domain knowledge - multidisciplinary/generalists are good descriptions. It's a title that can be also be applied to developers who work closely with mechanical/robotic devices/equipment as this also requires a greater depth or breadth of field and understanding.

 

Junior, Mid, Senior and Principal titles

In that exact order. We start our careers usually as one of the main four roles that I have listed and will maintain one of these prefixes as we progress though career life (mid is (usually) deduced if no prefix is given with a role). They are quite self explanatory and should serve as a good indication of the pay grade modifier for that role.

 

My only other very brief advice in relation to roles/positions for seeking a company is to be wary of: 'Too many chiefs and not enough Indians' & 'Not enough chiefs and too many Indians' Both will block your career progression quite badly; the former will do so because they won't be able to justify to HR that you should be Senior (and the 10-20k pay rise). You'll also likely become the perpetual 'tea boy' and general office joke; the latter will do so because you'll not be able to learn or be mentored plus it smells of high staff turnover. Stay away.

 

In closing then I'm really trying to say to you that maybe you should have a think about and do some research as to where exactly it is that you want/see yourself ending up in the Software industry. Are you a grunt or are you a leader who cares about more than what's in that nice comfortable box? If so then start thinking about and looking into stuff like Object Oriented Principals, SOLID and Design Patterns (all of which are agnostic to language).

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

i have a good base knowledge on computer hardware and machine language 

Machine language? You mean you're learning assembly? I wouldn't recommend that for a beginner because most assemblers are not coded in a user friendly way.

 

IMO, you should just download GCC and screw around or try to build something. Try and build checkers on the command line or something. The most important thing when I was learning was to learn how object lifetime and pointers worked; I had absolutely no idea how C# worked until I learned this in C.

 

Also don't learn C# or Java, they force you to use OO for pretty much everything, and OO is a fairly difficult thing to learn. Also things like Object lifetime as well as what is and isn't a pointer is not obvious at all. 

 

 

Software Engineer

Includes all of the Software Developer's responsibilities and is often also responsible for being heavily involved in the bigger picture or wider scope of the software development process; the whole wider orchestration of the design and project. Often they are more involved in wider reaching and more pivotal decisions. These individuals usually have a wider array of skills and domain knowledge - multidisciplinary/generalists are good descriptions. It's a title that can be also be applied to developers who work closely with mechanical/robotic devices/equipment as this also requires a greater depth or breadth of field and understanding.

fun fact: if you're in Ontario, you can get a $10000 fine for calling yourself a Software Engineer if you're not a licensed engineer, so it doesn't really mean that here.
 
Also, people that work closely with mechanical devices are usually called mechatronic engineers (I think). It doesn't necessarily require a greater understanding of programming as a whole, you just need to understand realtime programming well.
Link to comment
Share on other sites

Link to post
Share on other sites

IMO, you should just download GCC and screw around or try to build something. Try and build checkers on the command line or something. The most important thing when I was learning was to learn how object lifetime and pointers worked; I had absolutely no idea how C# worked until I learned this in C.

 

Great advice, I totally agree with this. Though really it's going to depend on how best you as an individual learn.

 

Also don't learn C# or Java, they force you to use OO for pretty much everything, and OO is a fairly difficult thing to learn. Also things like Object lifetime as well as what is and isn't a pointer is not obvious at all. 

 

I agree with the part about there being too much emphasis on OO. It's not all that's out there, learning functional for instance is highly valuable. I disagree completely that OO is hard - I think it's more how an individual finds it best to learn and what. At the end of the day C# has LINQ and that is semi functional...

 

fun fact: if you're in Ontario, you can get a $10000 fine for calling yourself a Software Engineer if you're not a licensed engineer, so it doesn't really mean that here.

 

Intriguing!  :lol:

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

I agree with the part about there being too much emphasis on OO. It's not all that's out there, learning functional for instance is highly valuable. I disagree completely that OO is hard - I think it's more how an individual finds it best to learn and what. At the end of the day C# has LINQ and that is semi functional...

I found that having to set up things like IComparable was just a really unintuitive process compared to doing it template/preprocessor style.

 

Trying to understand why you would ever want to use polymorphism was what I found hard at first. I still have never found a case where I couldn't have implemented it just as cleanly without polymorphism though.

Link to comment
Share on other sites

Link to post
Share on other sites

I found that having to set up things like IComparable was just a really unintuitive process compared to doing it template/preprocessor style.

 

Trying to understand why you would ever want to use polymorphism was what I found hard at first. I still have never found a case where I couldn't have implemented it just as cleanly without polymorphism though.

 

Templates are awesome, I like them a lot and with the new features of C++ 11 > the gap is closing quickly with the likes of C# in some areas. That said, when we start thinking about contrasting procedural, functional and OO it all goes back to when I say things like 'the right tool for the right job'... In any event if one is able to gain competency in them all then one will have a much bigger toolbox (or toy box) at their disposal = capacity for earning more money.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

Templates are awesome, I like them a lot and with the new features of C++ 11 > the gap is closing quickly with the likes of C# in some areas. That said, when we start thinking about contrasting procedural, functional and OO it all goes back to when I say things like 'the right tool for the right job'... In any event if one is able to gain competency in them all then one will have a much bigger toolbox (or toy box) at their disposal = capacity for earning more money.

Eh, there are plenty of things that can be the right tool for the job. 

 

For example, take the case of a generic typed object, there are several ways of doing it and there are many cases where it doesn't really matter what you use.

 

There's the C# style where everything is reduced to the base object class and then recast to a subclass of object.

There's the C++/C style where you use templates or the preprocessor to duplicate the code for every different type that needs it.

There's the C++/C style where you just use void pointers to store any kind of data.

 

Only in special cases is any choice better than any other. In my experience, most things end up like this.

Link to comment
Share on other sites

Link to post
Share on other sites

Eh, there are plenty of things that can be the right tool for the job. 

 

For example, take the case of a generic typed object, there are several ways of doing it and there are many cases where it doesn't really matter what you use.

 

There's the C# style where everything is reduced to the base object class and then recast to a subclass of object.

There's the C++/C style where you use templates or the preprocessor to duplicate the code for every different type that needs it.

There's the C++/C style where you just use void pointers to store any kind of data.

 

Only in special cases is any choice better than any other. In my experience, most things end up like this.

 

Hang on where did this come from?

 

You start talking about generics but then you give an example of inheritance for C# (which is a completely orthogonal concept). 

 

There's the C# style where everything is reduced to the base object class and then recast to a subclass of object.

 

Moreover it is very bad practice to be casting objects this way (or at all!). It is a code smell and it points to a bad design. C# does have the concept of generics, they are similar to C++ templates but also have large differences. I consider nether of them superior (as one can't really) just very good for their respective domains. C# also has reflection...

 

There's the C++/C style where you just use void pointers to store any kind of data.

 

Only in special cases is any choice better than any other...

 

Yes only if you are applying your end statement to that as this practice (unless used in very special circumstances) is also considered bad and points to a flawed design. Even so you can circumvent or at least lessen the evil somewhat by using a typedef struct to represent the opaque pointer (void*). This way it is at least declarative and hints to the intention...

 

...In my experience, most things end up like this.

 

I don't mean to sound condescending but if this is kind of thing that constitutes most of what you've been exposed to so far then it is time to seek different experience.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

 

 

 

 

fun fact: if you're in Ontario, you can get a $10000 fine for calling yourself a Software Engineer if you're not a licensed engineer, so it doesn't really mean that here.
 
 

 

 

Huh, thats an interesting fact, other then your masters or docterate is it even possible to be a "licensed" software engineering. I know there are engineering licenses for civil and electrical but I have never heard of it for software.

Link to comment
Share on other sites

Link to post
Share on other sites

Huh, thats an interesting fact, other then your masters or docterate is it even possible to be a "licensed" software engineering. I know there are engineering licenses for civil and electrical but I have never heard of it for software.

 

I know there's a software engineering program at my university. I don't really know why anyone would need an engineering license for software though.

 

 

Hang on where did this come from?

 

You start talking about generics but then you give an example of inheritance for C# (which is a completely orthogonal concept). 

 

 

Moreover it is very bad practice to be casting objects this way (or at all!). It is a code smell and it points to a bad design. C# does have the concept of generics, they are similar to C++ templates but also have large differences. I consider nether of them superior (as one can't really) just very good for their respective domains. C# also has reflection...

 

 

 

 

Yes only if you are applying your end statement to that as this practice (unless used in very special circumstances) is also considered bad and points to a flawed design. Even so you can circumvent or at least lessen the evil somewhat by using a typedef struct to represent the opaque pointer (void*). This way it is at least declarative and hints to the intention...

 

 

 

I don't mean to sound condescending but if this is kind of thing that constitutes most of what you've been exposed to so far then it is time to seek different experience.

I've seen generics used a lot in this way in C# libraries. In the C# SQL libraries IIRC, a SQL parameter's value is stored as an object, regardless of type. It also looks like the ArrayList class and probably some of the other deprecated C# libraries use this type of thing. http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,3e3f6715773d6643

I assumed this was how generics worked in C#.

 

I usually just name whatever void* holding struct I'm using after its type and then cast immediately when I'm taking data out. I try to avoid using typedef when I code, unless it's for data structures; I just find it easier to follow that way.

 

As long as you've coded whatever in a clean and easily understandable fashion, none of these methods are really any worse than any other in terms of code smell (unless you're doing generics with the C preprocessor). I could easily rewrite code that I've used for a List<T> to use an ArrayList and in terms of readability, it wouldn't change all that much. What I mean when I say that it doesn't really matter what method you use is that the only cases where your approach to this matters are in specific cases where timing, memory consumption, optimization, etc. is critical. 

Link to comment
Share on other sites

Link to post
Share on other sites

I've seen generics used a lot in this way in C# libraries. In the C# SQL libraries IIRC, a SQL parameter's value is stored as an object, regardless of type. It also looks like the ArrayList class and probably some of the other deprecated C# libraries use this type of thing. http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,3e3f6715773d6643

I assumed this was how generics worked in C#.eally matter what method you use is that the only cases where your approach to this matters are in specific cases where timing, memory consumption, optimization, etc. is critical. 

 

ArrayList is from a time before generics. I expect a lot of other code in the .NET framework is as well since generics didn't come until .NET 2.0 and old code doesn't usually get rewritten in better ways. Actual generics are implemented differently and provide extra benefits like "better compile-time checking, more information expressed directly in the code, more IDE support, and better performance" (quote from C# In Depth).

Link to comment
Share on other sites

Link to post
Share on other sites

ArrayList is from a time before generics. I expect a lot of other code in the .NET framework is as well since generics didn't come until .NET 2.0 and old code doesn't usually get rewritten in better ways. Actual generics are implemented differently and provide extra benefits like "better compile-time checking, more information expressed directly in the code, more IDE support, and better performance" (quote from C# In Depth).

http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ100

this page seems to indicate generics just recast to object type, just under the hood. I was always under the impression that the generic list was just an arraylist but strongly typed ArrayList, sop you could just get the benefits of a strongly typed list with a generic type.

Link to comment
Share on other sites

Link to post
Share on other sites

http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ100

this page seems to indicate generics just recast to object type, just under the hood. I was always under the impression that the generic list was just an arraylist but strongly typed ArrayList, sop you could just get the benefits of a strongly typed list with a generic type.

 

Generics in Java differ a bit from generics in C#. C# doesn't use casts under the hood like Java does. In C# the JIT lazily generates code for the class with the given type and caches it for future use (some overhead added here). I'm not sure how Java works with value vs reference types under the hood but in C#, when dealing with value types ArrayList boxes the values and stores the references to the boxed values. This is inefficient as you have boxing, unboxing, and more garbage collection taking place. Generics like List<T> just store the values directly and don't have to box anything. When dealing with reference types, there's not as big of a difference as they aren't boxed. You still don't have to cast from Object though (as far as I know).

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×