What programming language Factorio is written in?

Post all other topics which do not belong to any other category.
User avatar
Tev
Fast Inserter
Fast Inserter
Posts: 148
Joined: Sun Aug 02, 2015 7:42 pm
Contact:

Re: What programming language Factorio is written in?

Post by Tev »

Actually first language is not that important. Learn whichever you like (but C++ will be one of the hardest ones for beginner), later you will learn different ones ... Complex / difficult concepts will take time to learn anyway.

Making factorio mods with lua is easiest start.

Btw it is good to note that while other languages can't do what Wube has done, they have other advantages (productivity, community, ...). Everything is good for something.

AxeSlash
Burner Inserter
Burner Inserter
Posts: 18
Joined: Tue May 09, 2017 8:40 pm
Contact:

Re: What programming language Factorio is written in?

Post by AxeSlash »

I dabbled in various things (QBasic, VB6 & VBA, C) and never really liked any of them until I started learning C#. C# was the first one that I actually enjoyed writing in.

At least until I realised that most of the time these days I'm spending my time finding ways around .NET quirks and bugs rather than debugging my own stuff :P


The other reason I recommend C# is that you have the advantage of a free, easy to learn engine that supports it (Unity). So starting from scratch making your own game suddenly becomes a whole lot less daunting.

I suppose it depends what your goals are:
Do you want to knock out a casual or mid-market game quickly? C# & Unity - you might have a basic game knocked out in a few months.
Do you want a career in game development and/or to develop AAA high end games?: C, then C++ & things like DirectX etc- years of learning before doing anything serious.

bartekltg
Inserter
Inserter
Posts: 47
Joined: Fri Feb 06, 2015 12:40 pm
Contact:

Re: What programming language Factorio is written in?

Post by bartekltg »

While many people learned c++ after c, learning c only for later learning c++ this is far from optimal. You will invest time to learn c, then more to unlearn most of it:) Tricks "from c" can be used in c++, but this is not how one should write in c++ most of the times.
Just grab a _modern_ book for c++. The language changed a bit in last years.

User avatar
ledow
Long Handed Inserter
Long Handed Inserter
Posts: 97
Joined: Sat Sep 24, 2016 3:00 pm
Contact:

Re: What programming language Factorio is written in?

Post by ledow »

Program in a language. Any language. If you get to the point that you actually start coding anything independently, you can pick up any language you like.

Most people who I teach a language never get to writing their own programs (outside of tweaking examples, doing their coursework, etc.). If you're still coding six months later, then you will know enough to choose a language you might like.

For reference, I have programmed independently in everything from BASIC to C99, x86 & z80 assembler to FORTRAN, Pascal to Python, Java to Javascript, Google Go to Perl, SQL, bash scripting, all sorts. And I still program something in some language every day, often several at once. And I can often sight-correct programming errors in student's work just by glancing at their screen, in any of the above.

Currently in the middle of writing a 100k LOC game of my own in C99 / SDL / OpenGL.

What did I start on? ZX Spectrum BASIC. The language you start on doesn't matter. It's the concepts and ability that matter more. The point when you need to choose a language is when you understand why one is going better for your particular purpose.

EDIT: Wasn't formally educated in programming languages until I was already in uni and coding my own stuff. And then it was a Java course. Which was part of a maths degree.

User avatar
dusan22
Manual Inserter
Manual Inserter
Posts: 4
Joined: Sat May 20, 2017 9:57 pm
Contact:

Re: What programming language Factorio is written in?

Post by dusan22 »

It's praiseworthy to take interest in programming if a game encourages you to as an example. Even if it wakes your interest of how things work in the background of a particular game, like Factorio. Programming however is not something easy to "learn"... it's rather a different point of viewing / discovering things, not only computer related. Successful people transform their hobby into their work... not the other way around. Programmer in a company did not learn programming in the pursuit to work in the company to make money (or any other motive). He first discovered his hobby / interest in programming and then was good enough to capitalise on it. After all, what separates the good employee from exceptional enthusiast, is that the exceptional one takes his "work" home, after he leaves the office, because it's not "work".

Better start small and if your interest remains, you'll get to C++ eventually sooner or later. If not, I'm sure you'll discover other catalyst along the way, like graphics, audio, design,...

AndrewIRL
Fast Inserter
Fast Inserter
Posts: 240
Joined: Fri Mar 24, 2017 2:17 pm
Contact:

Re: What programming language Factorio is written in?

Post by AndrewIRL »

OP Last visited: Sat May 06, 2017 8:34 am

Day 15, people continue replying to someone who hasn't been online in two weeks.

User avatar
Tev
Fast Inserter
Fast Inserter
Posts: 148
Joined: Sun Aug 02, 2015 7:42 pm
Contact:

Re: What programming language Factorio is written in?

Post by Tev »

AndrewIRL wrote:OP Last visited: Sat May 06, 2017 8:34 am

Day 15, people continue replying to someone who hasn't been online in two weeks.
I think this discussion is helpful for many other people considering programming because of factorio. And considering the player base and their tastes, there are quite many people like that out there I think. Also, OP might look here just once a month. I did so before 0.15.

But yeah, there are way too many programmers here, so this topic is going to be bumped forever :-D

Kametec
Inserter
Inserter
Posts: 24
Joined: Sat May 20, 2017 9:24 pm
Contact:

Re: What programming language Factorio is written in?

Post by Kametec »

I generally check forums as a guest, logging in only when I want to reply. So if OP didn't log, it doesn't mean he isn't lurking around.

grimdanfango
Inserter
Inserter
Posts: 40
Joined: Thu Sep 10, 2015 6:38 pm
Contact:

Re: What programming language Factorio is written in?

Post by grimdanfango »

I'd be tempted to suggest going straight for C++ too...

"Learning to program" has little to do with "learning a programming language". They're two very different things. You learn to program *using* a programming language, but ultimately what you learn is highly transferable. It's only transferable however, *if* the language you used required you to learn it in the first place, so if you choose a language that doesn't require you to learn certain important concepts, you'll end up with an incomplete unstanding of "how to program", and you'll have to unlearn-and-relearn certain bad-habit-approaches when you move to something like C++ later on.

Ultimately, if you learn using C++, or even C, you'll end up with a far more complete understanding of the principles of programming, and you can rejoice in later being able to move onto almost any other language without much effort.

User avatar
Tev
Fast Inserter
Fast Inserter
Posts: 148
Joined: Sun Aug 02, 2015 7:42 pm
Contact:

Re: What programming language Factorio is written in?

Post by Tev »

grimdanfango wrote:Ultimately, if you learn using C++, or even C, you'll end up with a far more complete understanding of the principles of programming, and you can rejoice in later being able to move onto almost any other language without much effort.
I know only few details of coding in C/C++, but I wonder how well you'll learn functional paradigms in it. And seriously this whole idea of C++ being some "superior" language giving you more understanding smells like actual lack of understanding different languages and their pros and cons. You don't even consider potentially much lesser productivity of these languages, as well longer time before newbie will be capable of writing something useful in those . . . Advice like this is imo pretty bad.

grimdanfango
Inserter
Inserter
Posts: 40
Joined: Thu Sep 10, 2015 6:38 pm
Contact:

Re: What programming language Factorio is written in?

Post by grimdanfango »

Tev wrote:
grimdanfango wrote:Ultimately, if you learn using C++, or even C, you'll end up with a far more complete understanding of the principles of programming, and you can rejoice in later being able to move onto almost any other language without much effort.
I know only few details of coding in C/C++, but I wonder how well you'll learn functional paradigms in it. And seriously this whole idea of C++ being some "superior" language giving you more understanding smells like actual lack of understanding different languages and their pros and cons. You don't even consider potentially much lesser productivity of these languages, as well longer time before newbie will be capable of writing something useful in those . . . Advice like this is imo pretty bad.
Not suggesting it's "superior"... just that you have to dig into the minutiae of at least most programming concepts in order to use it effectively. It's not superior, but somewhat more "raw" than a lot of others, except for C or going even further and getting into writing assembly code. Most would probably agree that's a few steps too far, but C++, as probably the most ubiquitous language, and one of the more fussy, seems to me like the most reasonable place to start if you want an overview of programming best-practices.

I'm no professional programmer, and I've really tried very little myself, but I'm certain there are far more "productive" languages to actually use than C++ :-)

Miravlix
Long Handed Inserter
Long Handed Inserter
Posts: 63
Joined: Wed Jun 01, 2016 8:48 am
Contact:

Re: What programming language Factorio is written in?

Post by Miravlix »

The superior part of C is the fact it doesn't babysit you like Python, Java, LUA and all that script stuff.

None of these script language encourage you to learn to code, that is the point of them, that you don't need much of a clue to use it.

If you sign up for a real education, that teach you coding, you get experienced professors, that can teach you the basics, without you doing much else than showing up to class, but for anyone autodidact, go with a real language to begin with.

User avatar
Tev
Fast Inserter
Fast Inserter
Posts: 148
Joined: Sun Aug 02, 2015 7:42 pm
Contact:

Re: What programming language Factorio is written in?

Post by Tev »

Miravlix wrote:None of these script language encourage you to learn to code, that is the point of them, that you don't need much of a clue to use it.
Yeah, the point of higher level languages sure isn't ability to write bigger apps sooner and more effectively. Big apps actually don't force you to learn, or code well, you can just fool around as you wish. Also, learning for years is better than actually writing production code.


Ok, I'm out.

OBXandos
Long Handed Inserter
Long Handed Inserter
Posts: 52
Joined: Tue Jan 03, 2017 5:53 am
Contact:

Re: What programming language Factorio is written in?

Post by OBXandos »

Well for what it's worth C++ is a great starter language. In jr high I started learning QBasic and then we moved to C++ in high school. Finally in college I learned Visual Basic. The ideas and principles I learned with QBasic and C++ still worked in VB. Learning programming languages teaches you to think a certain way and that almost always translates over to other languages. Syntax and structure might change but the foundations are usually similar.

Daid
Fast Inserter
Fast Inserter
Posts: 163
Joined: Sun Jul 03, 2016 7:42 am
Contact:

Re: What programming language Factorio is written in?

Post by Daid »

OBXandos wrote:Well for what it's worth C++ is a great starter language. In jr high I started learning QBasic and then we moved to C++ in high school. Finally in college I learned Visual Basic. The ideas and principles I learned with QBasic and C++ still worked in VB. Learning programming languages teaches you to think a certain way and that almost always translates over to other languages. Syntax and structure might change but the foundations are usually similar.
We do not recommend C++ to people who are new because it's pretty common to get errors like this these days while compiling, if you don't exactly know what you are doing.
And these are the least of your worries.

Code: Select all

In file included from ..\SeriousProton2\include/sp2/script/bindingClass.h:7:0,
                 from ..\SeriousProton2\include/sp2/script/bindingObject.h:6,
                 from ..\SeriousProton2\include/sp2/scene/node.h:6,
                 from C:\Software\iMvaders2\src\spaceObject.h:4,
                 from C:\Software\iMvaders2\src\enemy.h:4,
                 from C:\Software\iMvaders2\src\enemy.cpp:1:
..\SeriousProton2\include/sp2/script/luaBindings.h: In instantiation of 'std::tuple<_Elements ...> sp::script::getArgs(sp::script::sequence<N ...>) [with ARGS = {float, short int}; unsigned int ...N = {0u, 1u}]':
..\SeriousProton2\include/sp2/script/luaBindings.h:31:28:   required from 'std::tuple<_Elements ...> sp::script::getArgs() [with ARGS = {float, short int}]'
..\SeriousProton2\include/sp2/script/luaBindings.h:117:48:   required from 'int sp::script::callMember(lua_State*) [with TYPE = Enemy; RET = void; ARGS = {float, short int}; lua_State = lua_State]'
..\SeriousProton2\include/sp2/script/bindingClass.h:26:25:   required from 'void sp::ScriptBindingClass::bind(sp::string, RET (TYPE::*)(ARGS ...)) [with TYPE = Enemy; RET = void; ARGS = {float, short int}]'
C:\Software\iMvaders2\src\enemy.cpp:211:54:   required from here
..\SeriousProton2\include/sp2/script/luaBindings.h:26:46: error: no matching function for call to 'convertFromLua(sp::script::typeIdentifier<short int>, unsigned int)'
     return std::tuple<ARGS...>{convertFromLua(typeIdentifier<ARGS>{}, N + 1)...};
                                ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ..\SeriousProton2\include/sp2/script/bindingClass.h:7:0,
                 from ..\SeriousProton2\include/sp2/script/bindingObject.h:6,
                 from ..\SeriousProton2\include/sp2/scene/node.h:6,
                 from C:\Software\iMvaders2\src\spaceObject.h:4,
                 from C:\Software\iMvaders2\src\enemy.h:4,
                 from C:\Software\iMvaders2\src\enemy.cpp:1:
..\SeriousProton2\include/sp2/script/luaBindings.h:160:22: note: candidate: sp::string sp::script::convertFromLua(sp::script::typeIdentifier<sp::string>, int)
 static inline string convertFromLua(typeIdentifier<string>, int index)
                      ^~~~~~~~~~~~~~
..\SeriousProton2\include/sp2/script/luaBindings.h:160:22: note:   no known conversion for argument 1 from 'sp::script::typeIdentifier<short int>' to 'sp::script::typeIdentifier<sp::string>'
..\SeriousProton2\include/sp2/script/luaBindings.h:155:22: note: candidate: double sp::script::convertFromLua(sp::script::typeIdentifier<double>, int)
 static inline double convertFromLua(typeIdentifier<double>, int index)
                      ^~~~~~~~~~~~~~
..\SeriousProton2\include/sp2/script/luaBindings.h:155:22: note:   no known conversion for argument 1 from 'sp::script::typeIdentifier<short int>' to 'sp::script::typeIdentifier<double>'
..\SeriousProton2\include/sp2/script/luaBindings.h:150:21: note: candidate: float sp::script::convertFromLua(sp::script::typeIdentifier<float>, int)
 static inline float convertFromLua(typeIdentifier<float>, int index)
                     ^~~~~~~~~~~~~~
..\SeriousProton2\include/sp2/script/luaBindings.h:150:21: note:   no known conversion for argument 1 from 'sp::script::typeIdentifier<short int>' to 'sp::script::typeIdentifier<float>'
..\SeriousProton2\include/sp2/script/luaBindings.h:145:19: note: candidate: int sp::script::convertFromLua(sp::script::typeIdentifier<int>, int)
 static inline int convertFromLua(typeIdentifier<int>, int index)
                   ^~~~~~~~~~~~~~
..\SeriousProton2\include/sp2/script/luaBindings.h:145:19: note:   no known conversion for argument 1 from 'sp::script::typeIdentifier<short int>' to 'sp::script::typeIdentifier<int>'
..\SeriousProton2\include/sp2/script/luaBindings.h:140:20: note: candidate: bool sp::script::convertFromLua(sp::script::typeIdentifier<bool>, int)
 static inline bool convertFromLua(typeIdentifier<bool>, int index)
                    ^~~~~~~~~~~~~~
..\SeriousProton2\include/sp2/script/luaBindings.h:140:20: note:   no known conversion for argument 1 from 'sp::script::typeIdentifier<short int>' to 'sp::script::typeIdentifier<bool>'
..\SeriousProton2\include/sp2/script/luaBindings.h:129:25: note: candidate: template<class T> T* sp::script::convertFromLua(sp::script::typeIdentifier<TYPE*>, int)
 template<typename T> T* convertFromLua(typeIdentifier<T*>, int index)
                         ^~~~~~~~~~~~~~
..\SeriousProton2\include/sp2/script/luaBindings.h:129:25: note:   template argument deduction/substitution failed:
In file included from ..\SeriousProton2\include/sp2/script/bindingClass.h:7:0,
                 from ..\SeriousProton2\include/sp2/script/bindingObject.h:6,
                 from ..\SeriousProton2\include/sp2/scene/node.h:6,
                 from C:\Software\iMvaders2\src\spaceObject.h:4,
                 from C:\Software\iMvaders2\src\enemy.h:4,
                 from C:\Software\iMvaders2\src\enemy.cpp:1:
..\SeriousProton2\include/sp2/script/luaBindings.h:26:46: note:   mismatched types 'TYPE*' and 'short int'
     return std::tuple<ARGS...>{convertFromLua(typeIdentifier<ARGS>{}, N + 1)...};
                                ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
..\SeriousProton2\include/sp2/script/luaBindings.h:26:80: error: no matching function for call to 'std::tuple<float, short int>::tuple(<brace-enclosed initializer list>)'
     return std::tuple<ARGS...>{convertFromLua(typeIdentifier<ARGS>{}, N + 1)...};
                                                                                ^
In file included from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/unique_ptr.h:37:0,
                 from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/locale_conv.h:41,
                 from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/locale:43,
                 from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/iomanip:43,
                 from ..\SeriousProton2\include/sp2/string.h:9,
                 from ..\SeriousProton2\include/sp2/script/bindingObject.h:5,
                 from ..\SeriousProton2\include/sp2/scene/node.h:6,
                 from C:\Software\iMvaders2\src\spaceObject.h:4,
                 from C:\Software\iMvaders2\src\enemy.h:4,
                 from C:\Software\iMvaders2\src\enemy.cpp:1:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1139:18: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && (! _ImplicitlyMoveConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, std::pair<_U1, _U2>&&)
         explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
                  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1139:18: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1129:9: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && _ImplicitlyMoveConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, std::pair<_U1, _U2>&&)
         tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
         ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1129:9: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1119:18: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && (! _ImplicitlyConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, const std::pair<_U1, _U2>&)
         explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
                  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1119:18: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1109:9: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && _ImplicitlyConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, const std::pair<_U1, _U2>&)
         tuple(allocator_arg_t __tag, const _Alloc& __a,
         ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1109:9: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1098:11: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && (! _ImplicitlyMoveConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, std::tuple<_U1, _U2>&&)
  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
           ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1098:11: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1088:2: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && _ImplicitlyMoveConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, std::tuple<_U1, _U2>&&)
  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1088:2: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1076:11: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && (! _ImplicitlyConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, const std::tuple<_U1, _U2>&)
  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
           ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1076:11: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1064:2: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && _ImplicitlyConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, const std::tuple<_U1, _U2>&)
  tuple(allocator_arg_t __tag, const _Alloc& __a,
  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1064:2: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1055:2: note: candidate: template<class _Alloc> std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, std::tuple<_T1, _T2>&&)
  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1055:2: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1051:2: note: candidate: template<class _Alloc> std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, const std::tuple<_T1, _T2>&)
  tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1051:2: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1045:11: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && (! _ImplicitlyMoveConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, _U1&&, _U2&&)
  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
           ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1045:11: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1035:2: note: candidate: template<class _Alloc, class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && _ImplicitlyMoveConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, _U1&&, _U2&&)
  tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2)
  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1035:2: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1025:11: note: candidate: template<class _Alloc, class _Dummy, typename std::enable_if<(std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ConstructibleTuple<float, short int>() && (! std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ImplicitlyConvertibleTuple<float, short int>())), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, const _T1&, const _T2&)
  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
           ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1025:11: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1013:2: note: candidate: template<class _Alloc, class _Dummy, typename std::enable_if<(std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ConstructibleTuple<float, short int>() && std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ImplicitlyConvertibleTuple<float, short int>()), bool>::type <anonymous> > std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&, const _T1&, const _T2&)
  tuple(allocator_arg_t __tag, const _Alloc& __a,
  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1013:2: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1002:2: note: candidate: template<class _Alloc> std::tuple<_T1, _T2>::tuple(std::allocator_arg_t, const _Alloc&)
  tuple(allocator_arg_t __tag, const _Alloc& __a)
  ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:1002:2: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:995:28: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && (! _ImplicitlyMoveConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(std::pair<_U1, _U2>&&)
         explicit constexpr tuple(pair<_U1, _U2>&& __in)
                            ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:995:28: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:985:19: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && _ImplicitlyMoveConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(std::pair<_U1, _U2>&&)
         constexpr tuple(pair<_U1, _U2>&& __in)
                   ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:985:19: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:976:28: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && (! _ImplicitlyConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(const std::pair<_U1, _U2>&)
         explicit constexpr tuple(const pair<_U1, _U2>& __in)
                            ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:976:28: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:967:19: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && _ImplicitlyConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(const std::pair<_U1, _U2>&)
         constexpr tuple(const pair<_U1, _U2>& __in)
                   ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:967:19: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:958:28: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && (! _ImplicitlyMoveConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_U1, _U2>&&)
         explicit constexpr tuple(tuple<_U1, _U2>&& __in)
                            ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:958:28: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:949:19: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && _ImplicitlyMoveConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_U1, _U2>&&)
         constexpr tuple(tuple<_U1, _U2>&& __in)
                   ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:949:19: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:940:28: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && (! _ImplicitlyConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(const std::tuple<_U1, _U2>&)
         explicit constexpr tuple(const tuple<_U1, _U2>& __in)
                            ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:940:28: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:931:19: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_ConstructibleTuple<_U1, _U2>() && _ImplicitlyConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(const std::tuple<_U1, _U2>&)
         constexpr tuple(const tuple<_U1, _U2>& __in)
                   ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:931:19: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:923:17: note: candidate: constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = float; _T2 = short int]
       constexpr tuple(tuple&&) = default;
                 ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:923:17: note:   conversion of argument 1 would be ill-formed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:921:17: note: candidate: constexpr std::tuple<_T1, _T2>::tuple(const std::tuple<_T1, _T2>&) [with _T1 = float; _T2 = short int]
       constexpr tuple(const tuple&) = default;
                 ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:921:17: note:   conversion of argument 1 would be ill-formed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:918:28: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && (! _ImplicitlyMoveConvertibleTuple<_U1, _U2>())), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&)
         explicit constexpr tuple(_U1&& __a1, _U2&& __a2)
                            ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:918:28: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:909:19: note: candidate: template<class _U1, class _U2, typename std::enable_if<(_MoveConstructibleTuple<_U1, _U2>() && _ImplicitlyMoveConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&)
         constexpr tuple(_U1&& __a1, _U2&& __a2)
                   ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:909:19: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:896:28: note: candidate: template<class _Dummy, typename std::enable_if<(std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ConstructibleTuple<float, short int>() && (! std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ImplicitlyConvertibleTuple<float, short int>())), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&)
         explicit constexpr tuple(const _T1& __a1, const _T2& __a2)
                            ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:896:28: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:887:19: note: candidate: template<class _Dummy, typename std::enable_if<(std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ConstructibleTuple<float, short int>() && std::_TC<std::is_same<_Dummy, void>::value, float, short int>::_ImplicitlyConvertibleTuple<float, short int>()), bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&)
         constexpr tuple(const _T1& __a1, const _T2& __a2)
                   ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:887:19: note:   template argument deduction/substitution failed:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:873:26: note: candidate: template<class _U1, class _U2, typename std::enable_if<std::__and_<std::is_default_constructible<_Tp>, std::is_default_constructible<_U2>, std::__not_<std::__and_<std::__is_implicitly_default_constructible<_U1>, std::__is_implicitly_default_constructible<_U2> > > >::value, bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple()
       explicit constexpr tuple()
                          ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:873:26: note:   template argument deduction/substitution failed:
In file included from ..\SeriousProton2\include/sp2/script/bindingClass.h:7:0,
                 from ..\SeriousProton2\include/sp2/script/bindingObject.h:6,
                 from ..\SeriousProton2\include/sp2/scene/node.h:6,
                 from C:\Software\iMvaders2\src\spaceObject.h:4,
                 from C:\Software\iMvaders2\src\enemy.h:4,
                 from C:\Software\iMvaders2\src\enemy.cpp:1:
..\SeriousProton2\include/sp2/script/luaBindings.h:26:80: note:   candidate expects 0 arguments, 1 provided
     return std::tuple<ARGS...>{convertFromLua(typeIdentifier<ARGS>{}, N + 1)...};
                                                                                ^
In file included from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/unique_ptr.h:37:0,
                 from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/locale_conv.h:41,
                 from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/locale:43,
                 from C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/iomanip:43,
                 from ..\SeriousProton2\include/sp2/string.h:9,
                 from ..\SeriousProton2\include/sp2/script/bindingObject.h:5,
                 from ..\SeriousProton2\include/sp2/scene/node.h:6,
                 from C:\Software\iMvaders2\src\spaceObject.h:4,
                 from C:\Software\iMvaders2\src\enemy.h:4,
                 from C:\Software\iMvaders2\src\enemy.cpp:1:
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:859:17: note: candidate: template<class _U1, class _U2, typename std::enable_if<std::__and_<std::__is_implicitly_default_constructible<_U1>, std::__is_implicitly_default_constructible<_U2> >::value, bool>::type <anonymous> > constexpr std::tuple<_T1, _T2>::tuple()
       constexpr tuple()
                 ^~~~~
C:/mingw-w64/i686-6.1.0-release-posix-dwarf-rt_v5-rev0/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/tuple:859:17: note:   template argument deduction/substitution failed:
In file included from ..\SeriousProton2\include/sp2/script/bindingClass.h:7:0,
                 from ..\SeriousProton2\include/sp2/script/bindingObject.h:6,
                 from ..\SeriousProton2\include/sp2/scene/node.h:6,
                 from C:\Software\iMvaders2\src\spaceObject.h:4,
                 from C:\Software\iMvaders2\src\enemy.h:4,
                 from C:\Software\iMvaders2\src\enemy.cpp:1:
..\SeriousProton2\include/sp2/script/luaBindings.h:26:80: note:   candidate expects 0 arguments, 1 provided
     return std::tuple<ARGS...>{convertFromLua(typeIdentifier<ARGS>{}, N + 1)...};

Ripshaft
Inserter
Inserter
Posts: 49
Joined: Tue May 23, 2017 9:09 pm
Contact:

Re: What programming language Factorio is written in?

Post by Ripshaft »

oux wrote:Thank you, I am going to begin studing C++ then.
While I encourage you to doink around in whatever programming language you want, I want to emphasize something really important;

programming is easy, anyone can learn to program just by sitting down and getting to it. However the valuable skills in writing code are mostly organizational and not technicalities of coding, and for that you really want to take a formal class in software engineering, which will teach you how to plan the structure of your code such that you can be effective and efficient in achieving complex goals, and especially how to work well with others.

Also I think c is a great language to start with, as it's a reasonably low level language that's still very programmer friendly compared to an actual low level language. Then try a low level language like the assembly language for your chipset and mid-high level language like c++ or java. If you fall in love with any level of programming it'll help steer you towards what tasks you'd like to work in.


Though once again, put serious thought into taking a course in software engineering - it's very easy to get into bad habits that are difficult to unlearn.

t-lor
Long Handed Inserter
Long Handed Inserter
Posts: 64
Joined: Tue Apr 25, 2017 9:28 pm
Contact:

Re: What programming language Factorio is written in?

Post by t-lor »

OBXandos wrote:Well for what it's worth C++ is a great starter language. In jr high I started learning QBasic and then we moved to C++ in high school. Finally in college I learned Visual Basic. The ideas and principles I learned with QBasic and C++ still worked in VB. Learning programming languages teaches you to think a certain way and that almost always translates over to other languages. Syntax and structure might change but the foundations are usually similar.

I think your contradicting yourself here ;)
VB is an excellent language to learn , although i would still rather begin with python or such.
I started out in delphi/pascal its easy to learn, and fun because u can make a simple program quite soon.
Once u got your head around things like variables, functions, basic algoritm design etc. oop
Then its a perfect time to start messing with c++ or any other language

But in the beginnning, dont. U dont need any of it "raw power" for your first introduction, and u certanly dont need all the complications that it can produce.

Kametec
Inserter
Inserter
Posts: 24
Joined: Sat May 20, 2017 9:24 pm
Contact:

Re: What programming language Factorio is written in?

Post by Kametec »

I'd say it doesn't really matter which language you start with. In procedural programming, there are concepts and techniques which are independent on the language. Beginner programmers should get their heads around those and it doesn't really matter if they write { } or begin end.

NosytNamffoh
Burner Inserter
Burner Inserter
Posts: 8
Joined: Wed Dec 21, 2016 2:30 pm
Contact:

Re: What programming language Factorio is written in?

Post by NosytNamffoh »

I would say that in order to be a 'good' programmer you need to learn things from the bottom up.

Start with CPU architecture and learn what a CPU is actually doing when you write a line of code, regardless of language. You don't need to be proficient at assembly, but understanding it helps build a solid foundation of understanding.
Next I would start with good ol' C. This way you need to learn the importance of the things you learned from CPU architecture. How pointers work, are passed and referenced starts to become clear.

After you have learned the basics of C I would move to C++ as a baptism by fire for OOP. Don't try to become a C++ programmer but again learn the dynamics, syntax and organizations of different types of data structures.

After you have a reasonable understanding of C++ everything gets WAY easier. I have programmed in C, C++, C#, Java, Python, VB, Javascript, PHP all using what I learned from the structure of a programming in C and C++. Best part is I am not actually a programmer by profession. I went to school for EE and basically branched into different types of Quality/Consulting work. What being able to program in different languages has done is allow me to automate many parts of my work.

Anyway I am a firm believer in understanding the blocks your working with before you start trying to put them together. Regardless of programming language things are challenging when working with OS's where you need to learn and use other people's libraries etc.

I would also recommend picking a small project for each language as I learn better when its a means to an end. If I just pick up a book and read it I don't really retain the information as it looses its context when I don't actually implement it in my own way.

Locked

Return to “General discussion”