# So you want to learn to program?



## FAST6191 (Sep 9, 2014)

So you want to learn to program then, this is good as it is a great skill to have and we are probably still a few years out from human language style programming.

As far as most around here are concerned there are going to be three types of programming

1) The hardcore/traditional knowing what is happening at the CPU level and everything up from there. A lot of games related programming will fall under this, certainly if you want to hack games you would probably want to have an appreciation for it.

2) "I just need to make this document/picture/small database turn into this format so another program can use it".

3) I want to do websites. Technically you can do a lot of 2) with many website programming languages/methods as well.

All three are valid things to be doing, all three make people lots of money though it is seldom easy money.

For the most part around here we will suggest you go in for 2) as you can do most things with it, 1) is really only necessary when you need lots of speed and for the most part 3) amounts to learn some PHP, HTML, CSS and just install wordpress or some script that does what you want (there probably is one already).

Still this is not being very helpful so onto the meat of the subject.

*Enough of the setup, get to the links*

Programming is done in so called programming languages, there are hundreds of them but this list narrows down considerably if you only include the ones in common use (and you probably should). It is often possible to mix languages within a program, typically this is done when something needs to be faster or when a new programmer takes over and is more comfortable in another language.
There are endless distinctions between different languages, many of which are of limited use, but the main one would probably be high level and low level.
High level languages take away some of the fiddly concepts associated with lower level languages, provide you a lot of premade means to do lots of different/common tasks and will generally be able to be ported between different operating systems far more easily than others. They come at the cost of being slower than some lower level languages (not so much of a problem in the modern world), maybe not integrating as tightly with the operating system and not teaching people about the lower level aspects of their code. However they can also come with the benefits of being more secure owing to said low level concepts being easy to mess up and they do work so people use them.

If you are learning to program we highly suggest this playlist
https://www.youtube.com/playlist?list=PL6B940F08B9773B9F
and this site
http://programming-motherfucker.com/become.html

More generally the languages of choice are

*1) C and C++*
C is very old but used extensively in operating systems, video encoder/filter programming, driver development and other high performance tasks. It is not suggested here as a language to learn with but if you plan to do high end coding, such as those fields mentioned in the previous sentence, you might wish to go back and learn it afterwards.
C++ is newer, though still old compared to a lot of other things on this list, and has many uses within those three as well.
Above this looms assembly language. This is often a slightly more readable version of what the processor does (which is a lot of quite simple instructions that make up a complex task), very few code in it any more and nobody really codes full programs in it (mainly small sections that have to run fast). Naturally different processors and even different operating systems have different ways of setting about assembly programming.

Related to this would be objective C. Objective C was pioneered by Apple and is what they suggest for coding programs to run on OSX, and is was the main language used (other than web programming) for ios (ipods/ipads/iphones and similar things) though these days there is also swift.

*2) Python, C# (see also .net), Java, Ruby, Perl and Lua (used for a lot of emulators)*
http://programming-motherfucker.com/become.html has links for all of these.
C# technically works outside Windows but most consider it more for Windows based programming, see mono if you want C# on other platforms. All the others are largely platform agnostic and if you code it right then the software written in them will run happily on other operating systems.
Java is very popular among business software developers, possibly because it got in there first and caught the market (business software has a very long lifetime). Owing to some security issues it has fallen out of favour among some people, however it is very popular and can get things done.
Ruby is more commonly seen in web development (as Ruby on Rails) but is made so it works well as a normal programming language.
Python is very popular as a scripting language and is often considered the glue that holds modern computing together. If you have to get two things to talk to each other it is probably written in python.
Perl once rivalled python in popularity but python grew faster. It works in kind of similar ways to python (though it has differences in others). If you have text that needs editing then this is what a lot of people look at.
Lua is much like Python and Perl, however it has found many fans among game and emulator authors for plugins and scripts.


*3) HTML, CSS, PHP and javascript.*
HTML and CSS are not programming languages, however they are what web browsers render. At one time they were separate entities but today they are basically indivisible and we would shy away from anybody that wants to consider them separately.
Javascript is a programming language and generally runs on the user's computer.
Actual web programming back on server can be done by any number of languages (though many seen in 2) are seen again here) but the big two are
PHP
Not liked by some it is still a popular programming language for web use, also one of the easier languages to jump in and start getting stuff done with.

ASP.NET
This is Microsoft's language of choice for their servers, fairly closely related to C#/.net. As you have to pay for Microsoft operating systems to run this on servers where Linux based ones may come for free it is not quite as common in many circles, especially not free and/or open source software, but it can be worth looking at, especially if you otherwise have Microsoft servers and want your website to talk to those.

You may also want a database for your server, or indeed the program you are using will use one. There are many database formats but the main three are
MySQL (and other SQL related languages), PostgreSQL and Oracle.
Oracle tends to be used by companies needing high end performance and you are not likely to encounter it in the free software world. MySQL is mostly free and very popular, however it has some odd licensing parts so there is something of a push to go to another type of database. If you learn general SQL then most other vendor specific extensions will be like learning a slightly different dialect of a human langauge.


There is also XML to consider both as part of database/info rendering and general web programming. XML is a way of writing data so other things can look at it (parse it to use programming terminology). Going further still you might like to read up on .htaccess

You can run normal programs on web servers, and have the web server program run said CGI programs on command. The most common method for this would be "CGI" and "fastCGI". Equally many Linux/BSD based servers will have so called "cron jobs" which run at set periods (including once a minute) to do certain tasks, other servers also have similar functionality.

*What to type my program in?*
Programming languages are usually text based so any text editor that spits out plain text can do it. Many will choose to have more programming related editors and even full programming suites commonly referred to as IDE (integrated development environments).
Many IDEs are geared towards a given language and you can look at them once you have found a language you want to learn. Some resist using and avoid suggesting, or even suggest avoiding, IDEs as they can encourage lesser code by virtue of helping the programmer out. There is a certain logic to this but not one we can really get behind.

If you just want a basic text editor for windows with a few programming extras most will say you can not really go wrong with notepad++
http://notepad-plus-plus.org/
On linux much of the notepad++ functionality is available in "Geany".

If you want a basic kind of IDE for C and C++ then code::blocks
http://www.codeblocks.org/

Eclipse is one of the more noted Java IDEs
https://www.eclipse.org/

Microsoft have their own coding tools, ones that are highly respected, in the form of visual studio.
http://msdn.microsoft.com/en-us/vstudio/aa718325.aspx

Apple tend to use Xcode
https://developer.apple.com/xcode/

Python is kind of its own IDE when you install it.

For HTML, CSS and javascript you may also want a debugger for your web browser. Most modern browsers will come with a basic one. For firefox the firebug addon comes highly recommended
https://getfirebug.com/

*Programming for kids and academics.*
The 1) 2) and 3) list is aimed more at people that need to get things done. If you want to have your child (or you are one) and you want an easy in to programming then there are options.
Programming languages aimed at kids have been around for decades (see things like Logo) but these days most would probably point people at Scratch and tell them to give that a go.
http://scratch.mit.edu/
It is quite visually driven and that seems to work well as far as teaching concepts.

The academic side of programming has a long and strange history, though there is some crossover into the real world stuff there is also much that barely makes it outside of academic fields. You are encouraged to see if there is one for your field (there is often some piece of legacy software written in a very old or not so common language, however as it does what it needs to do then it has stuck around -- business software may run for decades but academic can be even longer). Not wishing to go too far into that we shall instead stick to academic coding discussions. Much like general linguistics will compare and contrast human languages, sometimes with the aim of creating purer concepts within them, there comes academic programming languages that aim to teach, be able to be extended easily and ease certain types of development. Lofty goals but ones that are actually often achieved if you know what you are doing.
The most popular languages here are Scheme and Lisp, though things like Haskell are also popular and older languages like Pascal also still appear.

*I want to make robots and electrical devices*
General electronics is probably outside the scope of this thread, it is covered extensively elsewhere on the internet though.
Both of these tasks tend to want programming nowadays. There are typically three classes of device to do this with, possibly 4 depending upon how you want to view things.
*FPGA*
King of the hill really. They are often the fastest, they often have the most resources for the current draw/purchase price and they are the most extensible of all of them (you can quite literally remake electrical devices/chips that work the same as the originals if you have enough gates to do it). Consequently they can be an absolute pig to program and use, though modern stuff is getting to be quite nice.
Two links that form a good introduction to FPGAs
http://www.eevblog.com/2013/07/20/eevblog-496-what-is-an-fpga/
http://www.eevblog.com/2014/06/30/eevblog-635-fpgas-vs-microcontrollers/
Though there are some higher level options these days the classical programming languages used by them were VHDL and Verilog.
Some also found them useful in certain types of high performance computing -- aspects of password cracking, bitcoin mining (for a while anyway), various people in high speed stock trading... all have been seen to use FPGAs to great effect.

*CPLD*
Slightly less powerful than a FPGA (CPLDs are also nowhere near as good at replicating devices as FPGAs) but arguably more than a microcontroller. Their domain is being somewhat encroached upon by microcontrollers at the lower and the easier to use versions of FPGAs at the higher one. Classically though they were less powerful than FPGAs but did more than microcontrollers, however they may have also been easier to use during this period.

*Microcontrollers*
The two big makers/brands of these are the Microchip Technology "PIC" and Atmel "AVR", you may have even heard of them before. They are not great at doing lots of maths, not great at taking wide ranges of inputs, typically not fast enough to drive many outputs (including video) and can consume a reasonable amount of power for what they do, though this power is still well within "good runtimes on a cheap and cheerful battery" range. However if you just need to take a few inputs (digital or analogue), put out a few outputs, do some basic number crunching/logic on the pins (if these two pins have a signal then output this pattern to another pin and...) they do very well. They are also quite nice to program for.

*High level microcontrollers and minicomputers.*
Various groups, most popularly things like the arduino and teensy++. Arduino got in there early and most things that followed are clones (though being open source hardware that is considered quite acceptable) and adaptations of it.
It should be noted that this all kicked off a general trend so there are more easily programmable development boards available for FPGAs and such. Equally one of the big strengths of things like the arduino is that people can make "shields" for it which allow you to buy in devices to do a task (networking, motors, infrared, bluetooth.... and list goes on an on). 

At the slightly higher level are minicomputers. Earlier variations on the theme included things like the beagleboard but these days the most popular is probably the raspberry pi set of computers. They often run full graphical operating systems but as they have easily accessible IO pins you can take signals in and put signals out from them then they also play in this field. Bonus is with full operating systems you can often even program in the languages you see elsewhere (it is quite possible to program in python on a raspberry pi and output to pins to drive a robot or some electrical device). Save for cost, the lack of input/output pins and the power they draw you may well be able to go toe to toe with a FPGA in a lot of cases if you use one of these, certainly you will have an easier time if you wish to interact with it via network.

*Other important programming related concepts*

Related to this all this is licensing and the concept of open source. Software is a copyrightable work in all of the world, this means if you write it then you can direct its use like other copyrighted works. Much to the disapproval of many there are also software patents in a few places (though these few places do include the USA and Japan) but let us not get onto that. Though software is subject to copyright not everybody wants to lock down the users of their software and in doing so they often release it as open source, now this is technically a different concept to public domain (where works no longer have copyright and can be used by any) but the concepts brush up against each other.

http://opensource.org/licenses has some popular means by which to release your software to allow others to use it.
There are different theories as to what constitutes open source but in general open source is code that anybody can download, edit and make a version of to release by themselves. A lot of the time you will have to release your changes upon request; this is one of the bigger differences between the popular GPL and BSD families of licences, though read them carefully before you pick as things like LGPL specifically remove this aspect in some cases.
Also for some programs you might have to make your own icons/name. For instance the popular web browser known as firefox restricts people from using the name and logo of their project but allows people to use all of the underlying code, hence things like iceweasel.


A further field is code repositories. If you have been to websites like sourceforge, google code and github you would have seen the frontend to them. As code is typically text based you can treat it like text files. Code repositories allow you to upload files, note the changes, sometimes do automatic building and testing, make new projects based on existing code (a concept known as forking) and generally make things easier to manage. There are many methods here as well and different people have their favourites. The big three in most of open source works, and arguably in general, are

CVS
Considered old and outdated by some it still has a huge legacy following as it has been around a long time.

SVN (Subversion)
When CVS was getting a bit long in the tooth this rose up and captured a lot of the market, today some consider it to be long in the tooth.

Git
The new hot stuff in source code management, it is extremely powerful and some find its concepts a bit harder to get used to. It is well worth knowing about though and its power is actually useful once you know how it works. If you are not using one of the other two from another project we would suggest this one.

A further two might be Mercurial and Fossil.

You mainly want to know about them as they will allow you to download the source code, possibly contribute back and have it all set up for most open source projects.

*Programming for mobile devices.*
Mobile devices are popular these days and people like to program for them. Though you can do web related stuff for all three they tend to want you to use their chosen languages.
The big three operating systems in mobile are

*Android*
Helmed by Google and the chosen programming language is typically Java.
To get programs onto your device you just need to set it up to allow development. To get it onto everybody else's device (assuming they do not want to use developer mode and related things) you want to get it into the google play store. This takes a one time payment to register for.

*IOS* (Apple iphone, ipad, ipod and some of the other non-desktop/laptop Apple devices)
Software for Apple mobile devices is typically coded in a variation on C called objective C, however Apple somewhat recently introduced a somewhat higher level language called Swift, both are also available for normal desktop programming on Apple devices.
Once the most popular mobile OS it has since lost lots of market share to Android. It is also notable for wanting people to have fairly new versions of Apple's desktop operating system OSX (technically only available on their hardware) to be able to make programs. You also have to register with Apple to get it on their store, it costs $99 USD a year.

*Microsoft*
Not as popular as IOS and Android it does still see quite a bit of use in some circles, mainly business environments (though the other two are not slouches there either).
http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners has more.

*End*
Programming a highly varied field and this has barely scratched the surface (barely anything was mentioned about security for instance), however this should hopefully give you the means by which to get started.


----------



## migles (Sep 9, 2014)

some questions i'd like to ask

whats the difference between C and C++ ? what is special\best things on either?
are they best suitable for some type of software than the other?


----------



## marcus134 (Sep 9, 2014)

migles said:


> some questions i'd like to ask
> 
> whats the difference between C and C++ ?


 
c++ is almost a superset of c
the point was the ability to easily port code from c to c++ without having to rewrite a line and then use the new stuff c++ gave access to.
and c++ added object oriented programming (classes)
http://en.wikipedia.org/wiki/C++#Compatibility
http://en.wikipedia.org/wiki/C_(programming_language)#Uses


----------



## migles (Sep 9, 2014)

marcus134 said:


> c++ is almost a superset of c
> the point was the ability to easily port code from c to c++ without having to rewrite a line and then use the new stuff c++ gave access to.
> and c++ added object oriented programming (classes)
> http://en.wikipedia.org/wiki/C++#Compatibility
> http://en.wikipedia.org/wiki/C_(programming_language)#Uses


 
does this mean, if i want to learn a low level language, C would be outdated and i should just learn c++ since its an upgraded\dated language it doesnt make much sense learning C in this "era"?


----------



## FAST6191 (Sep 9, 2014)

Sorry I meant to say that this and the other two threads that have followed (operating systems and multimedia) were just guides/overviews I dashed out to help with the new sections you see before you. However rather than leaving them languishing on my hard drive/in a staff section like such things usually do I thought I might as well leave them out for suggestions/comment. I know I need to format it better though.

Anyway mostly what marcus134 said. C is not necessarily outdated but its usefulness in general day to day programming is less useful, C++ very much stealing its crown and it being crept up upon in turn but the likes of python, java and ruby. However C is used a lot in very high end programming (drivers, kernels, video encoding, high performance graphics work, general high performance...) and its legacy is such that it will probably never go away. If you want an example of the legacy of C then see something like K&R C (basically the original C standard) -- it is not quite as lucrative as being a good COBOL programmer is today (COBOL is a language that rose to serious prominence in the business world back in the 1970s and 1980s, only for it to stop being taught and the supply programmers that know it to dry up, today they are drag people out of retirement, pay them telephone numbers for a few months work and consider it a bargain at twice the price) but ones that know and can handle K&R C can do very well for themselves.

I can not really say I would suggest people learn it off the bat a their first and primary use language in 2014, there are worse things you can do (like learning some form of Basic) but C is hard for a lot of things and if you mainly want to make programs that mortals have to know about then maybe not. If you want to hang out with those that make drivers, make the linux/BSD kernels, make ultra fast video encoding/filtering software, maybe some emulator stuff, general high performance software, maybe some electronics (though that probably falls under drivers) and play with porting old games then yeah eventually think about learning C of some form. If you know K&R C then you also have an option in dealing with legacy business software, I can't say it appeals much to me but there are those that would chase a paycheck.

Learn it alongside the stuff as the UNSW/Richard Buckland course teaches it, that is good stuff. Learn the ropes of it after you have C++ and another even higher level language (python, java, maybe one of the academic ones) and it will probably benefit you as a programmer.


----------



## nando (Sep 9, 2014)

objective c is not just for ios, it is mac os x and it is now swift.


----------



## Foxi4 (Sep 9, 2014)

migles said:


> some questions i'd like to ask
> 
> whats the difference between C and C++ ? what is special\best things on either?
> are they best suitable for some type of software than the other?


The most important difference is the introduction of Classes and Objects which are pretty commonplace in contemporary _"object-oriented"_ programming. You _can_ program in an _"object-oriented"_ way in C using structs, but it's hardly _"standard"_ wheras in C++ Classes and Objects are native and intuitive.


----------



## cracker (Sep 10, 2014)

Dammit, FAST, you make me want to OCR that image to see if there is a hidden message in that binary!



migles said:


> does this mean, if i want to learn a low level language, C would be outdated and i should just learn c++ since its an upgraded\dated language it doesnt make much sense learning C in this "era"?


 
If you want to learn a low level language then learn some ASM (ARM would be a good choice since that is what most phones, handhelds -- GBA/3/DS/i, mobile devices, set top boxes -- like the Raspberry Pi, co-processors, etc. use currently). Anything that uses _normal_ human words and is structured _isn't_ a low level language. It is good for learning program flow and for learning how to tweak code to make it as fast as possible but it isn't practical for doing large projects in. With compilers having progressed so far you can often get almost as tight code (or more so depending on the programmer) as hand coding it. Also, for diversity you could program in 68K for calculator, Genesis, old Mac, etc. It is very similar to programming an ARM.


----------



## FAST6191 (Sep 10, 2014)

It should just be 0101010, if there is a message it is a happy accident.

On objective C I did mean to make that distinction, editing ensures.


----------



## marcus134 (Sep 10, 2014)

migles said:


> does this mean, if i want to learn a low level language, C would be outdated and i should just learn c++ since its an upgraded\dated language it doesnt make much sense learning C in this "era"?


latest C revision was in 2011 (C11)
I can't say if it's true or not, but C is perceived to be closer to metal than c++ which makes it better to code things like an OS, and compiler/interpreter for other programming language.



FAST6191 said:


> Anyway mostly what marcus134 said. C is not necessarily outdated but its usefulness in general day to day programming is less useful, C++ very much stealing its crown and it being crept up upon in turn but the likes of python, java and ruby.


 
I'll have to point out that C++ will never be overtaken by Python and Ruby as they are interpreted languages and are very slow and inefficient, ie: you'll never get a good 3d engine , they're nice cause you can script things fast and do all sorts of things. Java is compiled in a byte code that is executed by JVM , it's faster but still has a lot of overhead compared to many other languages, but has the advantages of being portable without recompiling.


----------



## Dr Eggman (Sep 10, 2014)

I have a question. I learned C (or at least, began to learn) in an introductory course last semester at school. I ended up loving programming. Problem is, I feel that C isn't really that useful in this day and age, but I do have the experience and grasp the concepts - I did very well in the course too!

This is my question - C (at least to my knowledge) is good for backends and stuff but not for GUI apps. It seems, that it takes a lot of knowledge to make a graphical app. I want to know what's the fastest, most versatile way I can get there. Mobile programming (iOS, Android) is an area of huge interest to me. What direction can I go that would get me writing those / desktop programs, etc.? I tried learning Objective-C but I'm not really well self-disciplined and don't learn well on my own. The other thing is, since I learned a procedural language first, it's hard for me to grasp the concepts of object oriented programming.

Thanks everyone.


----------



## FAST6191 (Sep 10, 2014)

You can make good GUIs with C, though you may wish to look into a GUI library/framework to do it as it is a pig if you have to do it all yourself ( http://www.gtk.org/ might be an example)
Fastest and most versatile... that would depend upon how you want to code your C program. The most rapid GUI development I have seen tends to come from the flash world, though I can also say things like autoIT ( https://www.autoitscript.com/site/autoit/ ) and possibly things like http://ahkscript.org/ do well. All of those should happily speak command line, use DLL files and even be able to do a bit of their own logic (if you want to make a batch option then those are good for it). Beyond that what about making it a web directed program? Web is all about the GUI/look and feel and if you look up things like CGI ( http://www.cs.tut.fi/~jkorpela/forms/cgic.html ) you do not even have to do something crazy like have a webserver that speaks/runs on C, barring something crazy with HTML5 (or possibly flash) you will be hard pressed to do something video or waveform related but it can certainly do text editing, click buttons, spit out lines of text and more.

With all that said Java, which is used by android, can also make a GUI in fairly short order. Python ( https://wiki.python.org/moin/GuiProgramming ) also does quite well.

I will also have to say that GUI/general interface design is actually something of a separate concept in programming, it is also why a lot of programmer oriented tools are a pig to use as many would be good programmers do not seem to care to learn GUI design. I am not really sure what resources I have for GUI design, other than web design anyway, that I would care to link. I am sure you could find something though.

As for things not taking over from C I am going to better on increased power makes for less resource concerned coders, perhaps not ideal but enough that the volume will tip. Equally some of the stuff WebGL is doing for 3d (which runs of the back of javascript) would rather dent the interpreted is not going to make good 3d argument.


----------



## Zanoab (Sep 10, 2014)

I'm disturbed by the lack of http://www.codecademy.com/

It provides interactive lessons for a handful of scripting languages (python, js, ruby, etc.) and walks you through each language one new element at a time. My favorite part is being able to create and share lessons for other users.



FAST6191 said:


> With all that said Java, which is used by android, can also make a GUI in fairly short order.


 

For Android, I'll believe you since I've never worked on the platform. For desktop programs, I'll have to say you are lying. If anything, the GUI toolkits available for Java are bloated and hell to get good at.

I have a friend who would use Java for everything because it is the only language he learned and felt like nothing else was better. I gave him a short lesson of Python and shown him how to do Hello World with wxPython using the interpreter. He jumped ship right away and spent the entire night learning how to program in Python. He even converted a few of his personal Java programs into Python and operated them via command-line. Within the next few days, he converted all programs and gave them a full GUI with far better functionality than the original Java versions. I literally told him to slow down as soon as he told me he started messing with Django to produce some web-based tools (his primary goal for programming) to share with his EVE friends.


----------



## FAST6191 (Sep 10, 2014)

I have never got along especially well with codeacademy, however that might be more because I am not what they are aiming for. I have had success with the things I linked, the only other stuff would have been the apress beginning ? series but you can do most of this for free so I left that out.

On java building a gui fairly quickly I was mainly going off that I have seen it done on several occasions, however the ones I saw do that were seriously good coders (as in spent their days doing device drivers and other such crazy things) so I may end up revising that one, equally first and sole language as java may also say a bit. Bloated and full of specifics.... doesn't that just describe Java in general? Beyond that there are things like netbeans, probably not the best if we are trying to teach how everything works but a big of drag and drop doesn't half speed things up.


----------



## grossaffe (Sep 10, 2014)

Don't be put off by the age of C, there's a reason it's stuck around; its a very powerful language.  It treats you like you know what you're doing rather than abstracting everything away and adding another layer of guesswork in how the machine interprets your code.  It allows you to manipulate memory, and you can treat data types however you wish; Want to treat that character as an integer instead?  Have at it.

I've had many a headache working with languages that abstract things away (curse you, python) that try to guess what I'm trying to do instead of letting me just do it.  I tolerate Java's abstraction because it comes with a lot of useful libraries, but when it did give me a rather big headache one time when I was creating a class dealing with generics, as I wanted to forgo their built-in arrayList structure and create the back-end on my own with a generic array.  It worked for one class, but then when I tried to do the same with another class it didn't work as apparently a generic type and a node of generic type are treated differently, as one is saved through run-time, while the other experiences type-erasure.  Took hours of research to what made the implementation for these seemingly identical cases work for one and not the other, and it was some weird, unintuitive quirk in the language, and even after finding the reason why it didin't work, the solution to the problem was equally difficult to find.

Long story short, <3 C.  Its used to program operating systems (it was actually developed for the purpose of coding the Unix kernel).  Chances are that if you're coding to a microcontroller, you'll be working in C.  It's a serious language for serious programmers.  If you want do work on graphical front-ends, learn the GTK+ framework, it's nice if you can get the hang of it.

And speaking of languages that expect you to know what you're doing but reward you for it, using VHDL when working with FPGAs or CPLDs is great, but it's certainly not for the feint of heart.  It's about as different from the other languages as you can get, but what else would you expect from something that is actually meant for creating a hardware design rather than software design?  Very powerful for the right applications.


----------



## Pagio94 (Sep 10, 2014)

migles said:


> some questions i'd like to ask
> 
> whats the difference between C and C++ ? what is special\best things on either?
> are they best suitable for some type of software than the other?


C is not much object oriented, C++ is. Also C has a lot of functions that let you take control of the hardware, it's the nearest language to assembly (though you can use the same functions in c++, c++ is 100% compatible with every c istruction) while c++ is more high ended


----------



## FPSRussi4 (Nov 22, 2014)

Another text editor(that I personally use) is Sublime. It's available for both Windows and Linux(Mac I assume as well). It allows you to set the syntax for the language you wish to code in (C, Java, Python etc) and then automatically follows that languages syntax standards and conventions,as well as highlights statements and loops, which can save a lot of time. I find it very helpful as I am a lazy programmer(code comes first, then conventions for me), and sublime helps a lot by organizing my code to the proper standards. 
Link: http://www.sublimetext.com/


----------



## shakirmoledina (Apr 16, 2015)

lovely intro to everything, probably this info can be updated with more details (hidden or redirecting to somewhere else on the forum)?


----------



## flame1234 (May 14, 2015)

Maybe you should mention a *debugger* or *debugging* program. Maybe you should mention a *disassembler* program. Sometimes (always?) the debugger and disassembler are the same program.
You would use a disassembler if there is some program, probably a game, that you want to change the behavior of. The disassembler will help you understand the program function and break (pause execution) of the program at certain points.
I'm not familiar enough with the topic to know what a debugging program does.


----------



## FAST6191 (May 15, 2015)

That is probably off topic and we have other threads on hacking. Most of the big IDEs (several were mentioned) will have a measure of debugging support you can use for the languages they support. To be useful in the modern world I would also have to go through the various anti hacking measures that code often employs

If you want some more on that have a look up some analysis (or indeed even try to do what they ask) for so called "hackmes" -- they are little programs people make that are deliberately made to be hacked and others are encouraged to do so. They usually will try to trip you up in certain ways that mirror the real world, commonly in things like executable packing. Naturally I will also point people at hacking conferences as they have great stuff too http://www.youtube.com/user/ChRiStIaAn008 and for anything I mention in this reply there will probably be an example of something very fancy, and probably also a nice introduction to the concepts, in said conferences.

Debugging program
Twofold really. On the one hand you have programs like GDB that are part of dev kits and if you compile with debug capabilities then you can get all sorts of info about the internal state of things. Most code released to the public will disable the debug flags though. You can attach GDB and co to normal programs but their functionality it more limited if you do not have a program with debug options enabled.

On the other hand you have tools like radare2 ( http://www.radare.org/r/ ) and the king of all debugging/hacking tools known as IDA ( https://www.hex-rays.com/products/ida/ ). These are aimed at looking at compiled code, even encrypted and obfuscated stuff (more on that later) and retrieving lots of info about the program and helping anybody pull something apart to figure out how it works (or indeed how it is not working but where you might lack the source code).

A disassembler is just an aspect of all this, it is not mandatory for a debugger to feature one but it is a very simple type of program to make if you have the CPU info, and provides very useful info when used properly, so most will sport one. Code is usually compiled from human readable language (runtime scripting like a lot of Java being the big exception) into the binary that runs upon the CPU (or GPU or whatever). Though there have been some very nice advancements in recent years in the field it is still very hard to decompile something that is not a scripting language, see the Halting problem, but you can convert this binary into the more human readable instructions easily enough (assembly is just the human readable form of these instructions, give or a take a couple of niceties). Not all code is instructions and with modern programming you will also find code can be packed into other things, compressed, encrypted and decrypted in stages or into memory to run and the purposes of various portions of the code having their meaning/functionality obscured (known as obfuscation).


----------



## flame1234 (May 15, 2015)

FAST6191 said:


> That is probably off topic and we have other threads on hacking.


That is fine, but there are no stickied threads about this topic. Could you point me in the right direction? In the first 20 topics, there's one topic on modding (Freddy's) only.

I never heard about radare2 before. Thanks for the tip!


----------



## FAST6191 (May 16, 2015)

There is not a lot in this section, and indeed not a lot for PC hacking in general. Still
http://gbatemp.net/threads/gbatemp-rom-hacking-documentation-project-new-2014-edition-out.73394/
https://gbatemp.net/threads/some-hacking-concepts-and-links.287721/

Neither of those go into some of the more in depth PC stuff, like the videos linked in a second, but if you can follow those previous things linked then it should leave you most of the way there. Obviously I would wind in some X86 assembly knowledge ( http://www.plantation-productions.com/Webster/ and http://stuff.pypt.lt/ggt80x86a/asm1.htm being my chosen two things for PC based assembly) to this but if you can fiddle with one type of assembly language you can usually grasp the main parts of another in fairly short order.


----------



## takeya yuki (Mar 13, 2016)

I really want to know how they make english patch for some japanese novel visual game?  And I want to learn


----------



## cracker (Mar 13, 2016)

The best place to learn is over at romhacking.net. Just be prepared for a steep learning curve since many games will use compression and non-standard formats of some sort to save space. It is really necessary that you learn to use a debugger and assembly language for the CPU of the system the game is on. Good luck!


----------



## pwsincd (Mar 13, 2016)

For web noobies , a place i guarantee every web designer / coder has been too at some point in their learning curve... and is very useful. Has simple tutorials for all web based coding...  there are more complex sites for more advanced programmers , especially with javascript with the masses and masses or libraries , its much more fun to learn yourself but there are libraries ready coded for most tasks you can think of..  but i digress.. my link is of  course http://www.w3schools.com/


----------



## PokeChampion (May 17, 2016)

I also have a hacker's manual book.


----------



## Seriel (May 17, 2016)

*sees topic*
No I don't.
*quits topic*


----------



## Nyap (May 17, 2016)

anybody else struggle to remember the words:
Enumerated types
Enumerations


----------



## FAST6191 (May 17, 2016)

Jackus said:


> *sees topic*
> No I don't.
> *quits topic*


Why don't you want to learn to program?


----------



## Seriel (May 18, 2016)

FAST6191 said:


> Why don't you want to learn to program?


Not now, i've got more important things to be doing.
Properly learning to code is something i'll pursue later.


----------



## FAST6191 (May 18, 2016)

Jackus said:


> Not now, i've got more important things to be doing.
> Properly learning to code is something i'll pursue later.



Like you do not need to be accurately able to explain the concept of past participles to be able to speak a language enough to do you well you need not "properly" learn computers to have some kind of useful coding skill. Looking to the future I imagine not getting people able to fumble with a bit of code is going to be considered one of the great oversights of education from 1990 to today.

If you mean you are not going to learn enough to get by now in the hopes of not having to unlearn things later when you go full bore into it then is a certain logic there. I am not so sure it is as applicable in computing as it is in other things, at least as long as you pick a good source to begin with.


----------



## cracker (May 18, 2016)

You kind of just have to take the plunge. If you have interest in it enough then you will learn. If not, then it isn't for you. Editing other people's source (especially with well commented code) is the easiest way to start for most along with looking at a book/site to help decipher functions, parameters. You have to start somewhere or you never will. Good luck!


----------



## Nyap (May 18, 2016)

my C++ tutorial says you need to #include the cstdint header to use fixed-width integers, but aren't fixed-width integers part of the core language? I can use them without the cstdint header on my setup (g++-4.9 w/ -std=c++14 flag)


----------



## Nyap (May 18, 2016)

L:


----------



## cracker (May 18, 2016)

It depends on the platform. An *int *could be 16-, 32-, 64-bit, etc. So it is a safeguard against problems (especially when doing ports to other platforms).


----------



## Nyap (May 18, 2016)

just finished the quiz for chapter 4 @ www.learncpp.com, pretty proud of myself

```
#include <iostream>
#include <string>

enum class Types
{
    OGRE,
    DRAGON,
    ORC,
    GIANT_SPIDER,
    SLIME
};

structMonster
{
    Types type;
    std::string name;
    int16_t health;
};

void printMonster(Monster monster)
{
    std::cout << "This ogre is named " << monster.name
              << " and has " << monster.health << " health\n";
}

int main()
{
    Monster ogre{Types::OGRE,"Shrkek",200};
    Monsterslime{Types::SLIME,"Bloop",150};
    printMonster(ogre);
    printMonster(slime);
    return 0;
```


----------



## PokeChampion (May 18, 2016)

Mine is called (A Complete Hacker's Handbook)


----------



## Vishnoo (Jul 30, 2016)

I think i should learn typewriting before programming.I hope it boosts my typing speed.


----------



## RevPokemon (Jul 30, 2016)

Hmm I personally can't really code (I used to know basic HTML but those days are gone) but I am trying to teach myself so I can began to port programs in Unix


----------



## FAST6191 (Jul 30, 2016)

Vishnoo said:


> I think i should learn typewriting before programming.I hope it boosts my typing speed.


I don't think typing speed and programming have all that much to do with each other. Equally if you are programming faster than you can type you are probably valuable enough to have a typist handle it for you, or take a week to learn how to do it.

Being able to type quickly and relatively accurately is a useful skill. Equally for the time being I don't imagine much useful programming will happen in the visual space (scratch is nice for teaching kids but anything practical is some time off) so it is necessary for programming. It is not terribly related beyond that though.


----------



## Gizametalman (Aug 9, 2016)

Howdy!
Years ago, I was interested in Programming, and actually, I WAS learning to code with a software called: "*DEV C++*", which I remember, it "had" many programming languages in it, so you can choose any you want to code on.
*CAN I USE* "DEV C++"?
Or do I have to download and install EVERY Coding Software out there? (the ones that I'm interested in, that is)
Like, I wan't to create free software, web pages, mobile games and videogames (GBA, NDS, 3DS, Android, IOS, etc.)
So I'm guessing that I need:
*-*C#
-C++
-Java
-LUA 
-Phyton
-Ruby

I have "DEV C++", can I learn all those languages with that software?


----------



## FAST6191 (Aug 9, 2016)

Is installing more than one IDE or compiler such an imposition? With the exception of IOS stuff then they can all be done for free on Windows.

Anyway programming is almost invariably a text based affair so you will want a text editor. Depending upon what you want to do beyond that you might be able to get away with just that, though more things helps a lot.

Free software can be done in almost anything (there might be some paid only languages somewhere or compilers or something that disallow it but hey).

GBA was mostly C and GBA assembly, DS did better for C++ as well but was mostly C and DS assembly.

Web pages. The basic markup and layout is the responsibility of HTML and CSS but websites themselves are written in a variety of languages. The most popular is probably PHP but ASP.net (Microsoft's offering, and sort of familiar to anybody that has done things with C#) and Ruby on rails are also popular. To go on top of this you also have CGI (ways for websites to call normal PC programs) and databases (mysql being the most popular in the free and easy world but there are many many other choices), oh and I suppose .htaccess is a thing worth noting.

Android is largely taken care of with Java.

IOS is probably a combination of objective C (apple took C and added object oriented stuff to it, similar in some concepts to the C++ everybody else uses) and I guess I should mention Swift. For objective C you will want a reasonably current Apple computer or make hackintosh/VM with OSX in.

Dev C++ mostly does C and C++ so yeah you will want extra stuff. I don't know if you want to spread yourself so thin though. By all means learn some web stuff at the same time as learning C or Java or something like that but that is a lot of stuff to learn at the same time as learning the fundamentals of programming, indeed even if you already know such things then it is still a fairly big ask.


----------



## Vishnoo (Aug 9, 2016)

Gizametalman said:


> Howdy!
> Years ago, I was interested in Programming, and actually, I WAS learning to code with a software called: "*DEV C++*", which I remember, it "had" many programming languages in it, so you can choose any you want to code on.
> *CAN I USE* "DEV C++"?
> Or do I have to download and install EVERY Coding Software out there? (the ones that I'm interested in, that is)
> ...



Get Visual Studio 2015 if you want to learn all programming language.


----------



## Gizametalman (Aug 9, 2016)

Thanks for both replies.
Visual Studio ain't working on my computer. I downloaded Visual Studio Community (or something along those lines) and it NEVER installed onto my computer.
I've been learning Java for the past 2 days and so far I'm kinda getting the hang of how coding works, still have a lot to learn.
I'm assuming that, once I learn ONE language (Java at least for me) then any other seemingly simple language shouldn't be as hard to learn from scratch...

Installing every single required software to code is not the problem. I just like to keep things organized.

--------------------- MERGED ---------------------------

When trying to install Visual Studio, it "deletes" something, and then a Error screen pops up.


----------



## Vishnoo (Aug 10, 2016)

https://www.microsoft.com/en-in/download/details.aspx?id=48146

Get the offline iso.
3.7GB


----------



## Deleted member 373057 (Sep 20, 2016)

FAST6191 said:


> I don't think typing speed and programming have all that much to do with each other. Equally if you are programming faster than you can type you are probably valuable enough to have a typist handle it for you, or take a week to learn how to do it.
> 
> Being able to type quickly and relatively accurately is a useful skill. Equally for the time being I don't imagine much useful programming will happen in the visual space (scratch is nice for teaching kids but anything practical is some time off) so it is necessary for programming. It is not terribly related beyond that though.


Though it is not crucial to type fast, or even above 50wp, I *highly* recommend teaching yourself how to type properly if you have not already. I used to be around 60wpm by having miss-aligned fingers, am now 110 wpm on a good day. Not only that, but symbols and words in general are easier to type. Regardless of whether you're going to code a lot, if you're at a keyboard for over 1 hour a day, typing properly is a must.


----------



## grossaffe (Sep 20, 2016)

One of my former co-workers in software development was known to be a hunt-and-peck type.


----------



## Deleted member 373057 (Sep 20, 2016)

grossaffe said:


> One of my former co-workers in software development was known to be a hunt-and-peck type.


Those people actually bother me. My computer science teacher types with 4 fingers whilst looking at his keyboard it and *really* irritates me.
Though it's probably just a pet peeve of mine.


----------



## flame1234 (Sep 20, 2016)

Hunt-and-peckers can actually type pretty fast, but can't do it without looking at the keyboard.

When I program I have to look at the keyboard because you need _ | <> ? [] {} * - = % a lot and a lot of people, even though they can type "The quick brown fox jumped over the lazy dog." can't type those special chars without looking.


----------



## Deleted member 373057 (Sep 29, 2016)

flame1234 said:


> Hunt-and-peckers can actually type pretty fast, but can't do it without looking at the keyboard.
> 
> When I program I have to look at the keyboard because you need _ | <> ? [] {} * - = % a lot and a lot of people, even though they can type "The quick brown fox jumped over the lazy dog." can't type those special chars without looking.


I can type all of those symbols without looking. The only time I look at my keyboard is for the function keys (F1, F12, etc.), those are a pain.


----------



## supergamer368 (Nov 6, 2016)

I translated the binary, it says:  *�����������������������


----------



## CosmoCortney (Nov 9, 2017)

Very nicely written. I'm a C++ coder and use the Qt IDE. It's easy to use once set up properly and there's plenty of tutorials out there 

But what about assembly programming? I know it might not be something reasonable for beginners but in my opinion worth mentioning.
C++ and assembly make a great combination


----------



## FAST6191 (Nov 9, 2017)

I like playing with assembly and value what I know of it greatly, however so very few things allow its use any more (usually in favour of intrinsics) and even if it did it tends to also get in the way of security models (kind of hard to do aslr with it, some then speculated all those inline functions being what held back security on pdf readers, flash and some aspects of java).

To that end its main users are hackers, people working with legacy code and students learning a bit of it so they have a clue what their compilers are doing and hopefully then why it is a bad plan to call functions from within functions and why they really want to manage their arrays are doing. At the same time it is also quite scary and has been seen to turn people away and then consider programming beyond their ken where they might well have been able to handle python, and it is not as though python doesn't do useful computing in timeframes which make sense.


----------



## Deleted User (Nov 9, 2017)

Serious question here.

My math skills are fairly poor, but ofcourse I know how to use a frigging calculator and how to work stuff out.

I'm planning to go to college in a year to study Games Development, but over the next year's wait until I get into my course, I want to study and improve as much as I can ahead of time.

What sort of maths skills would You (or others) suggest I learn over the next year? Call it a sylabus of math's categories I should be learning.


----------



## Coto (Nov 9, 2017)

StarGazerTom said:


> Serious question here.
> 
> My math skills are fairly poor, but ofcourse I know how to use a frigging calculator and how to work stuff out.
> 
> ...



I think audio related stuff is a good training source, same as graphics related coding. Plain learning about how to gather brick pieces should be the start in any language (and not language specific). But treat it as a start.

But I think deep learning (a word from machine learning field), only resembles (or at least they try lol) the scientific approach as how everything works.

Audio related approach I thought you would find interesting:
https://www.allaboutcircuits.com/projects/diy-synth-series-vco/

For graphics you can pretty much read the Open GL standard to see how to deal with matrix related stuff.


----------



## grossaffe (Nov 9, 2017)

StarGazerTom said:


> Serious question here.
> 
> My math skills are fairly poor, but ofcourse I know how to use a frigging calculator and how to work stuff out.
> 
> ...


Discrete Math, Graph Theory, and Linear Algebra would all probably be relevant to programming/game development.


----------



## FAST6191 (Nov 9, 2017)

There is a reason Rockstar hires physicists.

There is also a reason I don't think I have ever met a mathematician which knows their times tables. Mental arithmetic is a fine skill but unless you are working in a bar or counting cards it is a party trick, or maybe a sanity check (anybody can spot someone fat fingering a key and causing something to be some 10 times greater than it should be, someone accidentally using / when they meant * and the thing being accidentally divided by is 1.05 does warrant a bit more).

I have taught game developers aspects of physics before, and there are plenty of examples of similar things throughout gaming.

At the same time I can think of a dozen different fields which require some exotic maths which are easier if you understand the maths used to calculate them/describe them. Light, matrix maths, some of 3d movement and representation, ideas of rotational motion (swinging on a rope, said rope gets stuck on a point and you want momentum to be conserved), back to 3d stuff then simple scaling factors and manipulation of items (see 3d modelling or more likely engineering CAD), want proper water physics/fluid dynamics and it gets maths heavy very quickly. Other times you may run straight into a wall if you don't get a concept in maths (you get stories of people teaching others to program and they struggle with a concept, people wonder what goes and it turns out they are 12 and obviously have not met that in school yet). Many of those in my little list before are seen in games but at the same time these days we have hardware and prebaked software dedicated to it -- I am sure we have all played games which showcase a nice magic spell full of fancy particle effects but did nothing because the game dev did not think to balance it within their engine. I could unpack grossaffe's list of scary American (seriously, nobody elsewhere in the world uses subject headings like that) terms and show you how they might be useful -- most will allow you to predict how things will change once you throw real numbers at them, create nice models of operation (games where a wizard starts out squishy but eventually ends overpowered compared to their warrior friend are usually examples of exponential growth, or at least growth to a power vs linear growth, and if you understand graphs you will spot that and be able to correct for it in your game*), and otherwise understand things more easily.

*while exponential growth and linear growth often start off with linear being bigger they cross at some point. You can make your level 100 wizard grow in power such that it crosses at that point. Alternatively you can add some other factor to the game to hobble the wizard such that it can still be fun for the others (in games this will usually be damage per second but that is rather limiting a way of thinking about it).

With all that said it is not that maths heavy a field. You are not going to get anywhere without logic and understanding the concepts of flow within it but the maths... it is fairly basic addition and subtraction when all is said and done and you literally are having a computer do it.
Maths tends to get used to introduce concepts -- I don't know if you are familiar with the idea of factorials (tending to be written something!, 5! = 5x4x3x2x1 = 120, 4! = 4x3x2x1=24, 3!=3x2x1=6....) which is probably the purest representation of the idea of recursion I can think of.

Choice video at this point


No great maths in there. Programming in almost its purest essence though.

Still


 
You may recognise those as the equations of (linear) motion. If you can't manipulate those trivially to get a given concept ("first equation I am giving you v, v0 and t, now find a" sort of thing) or stick it in the quadratic formula (second equation I am giving you r, r0, a and v0, find me t) then sort that very quickly.

If you want to grasp the foundations of game theory and game design (the workaround for the overpowered wizard being a start there) I'll not say no either. These guys do well here https://www.youtube.com/playlist?list=PL3eVql0CPrVhG2AeVE1l8hcNPSNmoeagK


----------



## Zenarith (Mar 23, 2020)

Nice.


----------



## ClancyDaEnlightened (Dec 2, 2020)




----------



## ClancyDaEnlightened (Dec 2, 2020)




----------



## FAST6191 (Dec 2, 2020)

I fear you missed the funny pictures thread

Though if we are sharing amusing videos then


----------



## Silent_Gunner (Dec 13, 2020)

Hey, so now that I've finally conquered being in debt, I have had on the mind the idea of porting IKEMEN to something like the Switch. Specifically, IKEMEN-GO:

https://github.com/Windblade-GR01/Ikemen-GO

Ikemen is essentially a more open source version of MUGEN, with support for things like Netplay and has some of the features that one would expect of a game that uses a controller as opposed to depending on the keyboard to do basic things like pausing the game, changing the resolution, etc..

How hard is performing a port job for someone's first programming project? It seems, as far as I understand, that one of the difficulties of porting a lot of things to the Switch is converting x86-based code to ARM64, or aarch64 as it's also known as. Which might get it working on Ubuntu-L4T, but I take it that more work would be required to get it to HOS proper?


----------



## FAST6191 (Dec 13, 2020)

I would have to go have a look at the code, and probably also go learn what the Switch has to offer.

Porting gets harder when the base code leans into the hardware itself (which you do gain a speed boost for, as well as possible simplification -- for something like a console why write a full control handler that could accept an entire unicode range when the console has a fixed set of controls?) or leans into a library that is not available/has no equivalent or leans into an OS (though that mostly still means library). Similar things if you are converting between languages, especially if they are radically different in scope of what they handle (the web browser we are likely talking through is several dozen steps removed from the code the CPU sees which needs a whole lot more handled)
The baseline code can also be a thing -- ever wondered why many of the lesser PC ports might be fixed framerates rather than "whatever my PC can do"?

At the same time the best first project is one you will see through even if it is theoretically harder than something more commonly seen. You can bite off more than you can chew too however -- there are aspects of programming that loom larger than some others with 3d maths (guess what games use a lot of), security (basically a whole field unto itself, indeed cryptography is but a small part of security and is a field unto itself though you might well be spared that one here), things with established protocols (basic networking is not so bad, inventing your own networking is not going to get you far), some of the real time/low latency stuff (guess what can be useful in games).


To that end I might say first get the project compiled.
After this maybe try making some mods for it. Some might prefer to spend time documenting it.
After this if you want to try isolating parts of the code that would make a port effort harder (if say it has a bunch of assembly code) then rewrite that as a more generalised piece of code (try to keep speed in mind as well) as that will start to give you a taste of what porting will entail (you will probably have to do that a few more times, or maybe go in reverse and take some aspect of the code that needs to run fast and go for assembly to get it down). Assembly code fragments are not the only aspect of that, if it has a single function written to take advantage of some library you might try getting rid of that, or if it is written in a high level language (some helper program maybe) then get rid of that.

At the same time as that if you want to get a compiler setup going for the target of the would be port then you can do that too. Might even spare you from becoming too dependent on say full fat desktop libraries, conventions, lack of resource caps, and programming suites (though smashing a big boy say Windows IDE to accept programming for the Switch will probably teach you a lot).


----------



## ClancyDaEnlightened (Jan 6, 2021)

Nintendo before a system update


----------



## Deleted member 546892 (Jan 9, 2021)

*Laughs at the extensiveness*
...
*Looks at Stackexchange*
“WHAAAAAAAAA?!?”


----------



## Silent_Gunner (Jan 16, 2021)

@FAST6191 Can you or anyone else vouch for how good these ebooks are for getting into programming?

https://www.fanatical.com/en/bundle/c-plus-plus-bundle

I see it along with others that are big deals on learning materials that are otherwise an entire Walmart paycheck, and this store has these (along with a lot of games) on sale for prices that even Steam doesn't usually discount to, and wanted your input.


----------



## ClancyDaEnlightened (Jan 18, 2021)

Silent_Gunner said:


> @FAST6191 Can you or anyone else vouch for how good these ebooks are for getting into programming?
> 
> https://www.fanatical.com/en/bundle/c-plus-plus-bundle
> 
> I see it along with others that are big deals on learning materials that are otherwise an entire Walmart paycheck, and this store has these (along with a lot of games) on sale for prices that even Steam doesn't usually discount to, and wanted your input.



I can recommend this book for learning hardware design (software is easier if you know what the hardware is actually doing) it's a college book so it isn't the cheapest but it's well worth it for the info:


----------



## ClancyDaEnlightened (Feb 21, 2021)

Here is Jon burton, founder of both traveler's tales and Tt games 
Showing ya how to write some assembly on the genesis:.


----------

