Hi community :-) I've recently decided to renew my study of computer programming, and I'm looking for some opinions to help guide my way.I am looking to get into construction, and would like your opinions on...
Which languages are worth learning?Which tools are the best for new construction workers?
Do I need a degree to land a job in the field?No but it helps, especially if you want to ever be anything more than entry level.
if so, what type of program is best?Whatever makes you happiest. If you want to move into management consider MBA track. If you want to actually know what the hell you're doing look to engineering, especially EE. If you want to be a code monkey the rest of your life (some people are really happy with that choice by the way), just go modern CS. Some of the better candidates I've seen recently seem to be coming out of www.wgu.edu
which ones are crap?Any which promise you that the degree will translate into employability. Any "for profit school" especially. As I said before, I see some solid candidates are coming out of wgu.edu, but that's probably because you need to be completely self motivating to finish up there and that is the #1 skill a good programmer really has.
and to the devs of bitshares, what path did you guys take to become programmers?
Speaking as a full-time professional programming manager, I read this as...QuoteHi community :-) I've recently decided to renew my study of computer programming, and I'm looking for some opinions to help guide my way.I am looking to get into construction, and would like your opinions on...QuoteWhich languages are worth learning?Which tools are the best for new construction workers?QuoteDo I need a degree to land a job in the field?No but it helps, especially if you want to ever be anything more than entry level.
A better idea is to actively contribute to open source projects you actually care about. If you have any actual talent or skill, it will help you land a better job that way. You'll probably surprise yourself on that front.Quoteif so, what type of program is best?Whatever makes you happiest. If you want to move into management consider MBA track. If you want to actually know what the hell you're doing look to engineering, especially EE. If you want to be a code monkey the rest of your life (some people are really happy with that choice by the way), just go modern CS. Some of the better candidates I've seen recently seem to be coming out of www.wgu.edu
Best programmer I ever met had a Masters in Philosophy with a B.A. in Art Appreciation, though I'm still scratching my head on that one.
Everyone's story is different. I myself started as a code monkey mostly C/C++, used the money from that job to cover a degree in finance and then got the MBA for employability reasons because I kept seeing programming jobs get farmed out overseas. Honestly the code coming out of India and China is improving to the point that it does make sense for a company to send work there as long as they have a solid project plan.
So keep in mind you're now competing against people that can live on the same amount of money you might spend on a meal at McDonalds (US centric view here).
When I actually need to write code myself it tends to Java or Golang anymore. I got over myself and tend to use the tools with the best turn around time when I need to build anything more than a toy project, but I'm not doing a lot of coding myself anymore either.
YMMV.Quotewhich ones are crap?Any which promise you that the degree will translate into employability. Any "for profit school" especially. As I said before, I see some solid candidates are coming out of wgu.edu, but that's probably because you need to be completely self motivating to finish up there and that is the #1 skill a good programmer really has.
The degree will just get you past HR drones in Fortune 500 companies. The ones who actually make decisions about who to hire or not, probably don't care what your degree is in. Or even that you have one, if you can present a compelling enough case to them.
I once interviewed a candidate who disclosed that the degrees on the resume didn't exist and were there solely to get past the resume filters. B.S. in Human Information Tech or something like that. Hired them on the spot for their honesty. Company downsized the entire department 2 years later, he was still there.Quoteand to the devs of bitshares, what path did you guys take to become programmers?
I'm not a bitshare dev. I can't speak for them, but here is what is working right now speaking solely as someone who's job it is to hire, train and manage new code monkeys for a living.
Get involved right now with something you feel passionate about. You're here right now, so my guess is you'd like to work with something bitshares or at least crypto related. I don't know about what the backend code needs right now. It seems to work well enough for our purposes. So we never really questioned it too deeply. The core devs should probably chime in on that.
But your question is broad enough that I think you might make a better UI person than core anyways.
One thing I do know is that the easiest language stack to learn right now is probably Javascript/HTML5 & CSS.
My advice, for what it's worth, is that if you really don't have much background and want to contribute right away go here...
www.w3schools.com go through the HTML, CSS & JS stuff.
Then dip into angular & node.js for a bit. Once you feel like you've got a handle on that, come back and help the guys working on wallet.bitshares.org , it's a great little project but they need a lot of UI/front-end help. (I'm not affiliated, just a customer).
If you want to get into serious coding, back end, systems programming etc. Learn C, then Java, then Go. I recommend Java because at this moment in time it is the highest paying language in the USA and has been for a number years. Followed by C# which is actually a Java variant. Despite people who managed to contract a case of Mono.
At this point I would recommend skipping C++ for a newbie. There is no compelling reason for it anymore. The pay scale compared to Java & C# isn't worth it, and the pain of dealing with it's quirks is not a path I recommend for anyone who is not a masochist.
Sadly, the language has devolved to monstrous levels of complexity. The learning curve for that language and the use cases for it will probably never lead to a higher paying career than the same amount of time spent on Java & C# will.
I have yet to see anything done in C++ in the last 10 years that in my opinion couldn't have been better done with either Java, Go or C. Pretty sure bitshares itself is written in C++ though, so if you want to contribute to the core and become an actual core dev. You will probably need to gain C++ skills in the long run. However the BTS project is probably big enough now that I'm not sure they really need more core devs. But they might want to chime in on that.
Python is a good control language, i.e. for scripting other stuff, but I personally don't feel much love for it. Lua seems to be smaller and faster in the rare cases where I just need to bind quickly and expose scripting to something.
The other use cases for Python seem to be getting sucked up by Javascript especially with the release of Nashorn. Which honestly a few years ago I would have probably just marched you out the door for wanting to get people already confused with Java & Javascript. Avatar stack is proving me wrong though.
Golang has removed all the use cases I would have had for a Python/C stack except driver development and bit banging, both of which are really rare anymore anyways.
Avoid Perl, PHP unless you have a compelling reason to learn them such as supporting a legacy code base.
PHP has been making strides lately, but I've seen too many people bitten by it's absolutely shitty security track record and the fact that despite the documentation being excellent, the sample code still shows you the absolute least secure way of doing things.
Yet in our case the company website is built on top of PHP/Wordpress. However we don't put anything mission critical there either.
Still that was never my call.
If you're interested in your first shot as a dev, drop me a PM. I've got enough space to mentor one more complete newbie coder and I'll be honest you sound to me like you probably have competency already and just aren't sure of direction and/or lack confidence. Let me know.
Speaking as a full-time professional programming manager, I read this as...QuoteHi community :-) I've recently decided to renew my study of computer programming, and I'm looking for some opinions to help guide my way.I am looking to get into construction, and would like your opinions on...QuoteWhich languages are worth learning?Which tools are the best for new construction workers?QuoteDo I need a degree to land a job in the field?No but it helps, especially if you want to ever be anything more than entry level.
A better idea is to actively contribute to open source projects you actually care about. If you have any actual talent or skill, it will help you land a better job that way. You'll probably surprise yourself on that front.Quoteif so, what type of program is best?Whatever makes you happiest. If you want to move into management consider MBA track. If you want to actually know what the hell you're doing look to engineering, especially EE. If you want to be a code monkey the rest of your life (some people are really happy with that choice by the way), just go modern CS. Some of the better candidates I've seen recently seem to be coming out of www.wgu.edu
Best programmer I ever met had a Masters in Philosophy with a B.A. in Art Appreciation, though I'm still scratching my head on that one.
Everyone's story is different. I myself started as a code monkey mostly C/C++, used the money from that job to cover a degree in finance and then got the MBA for employability reasons because I kept seeing programming jobs get farmed out overseas. Honestly the code coming out of India and China is improving to the point that it does make sense for a company to send work there as long as they have a solid project plan.
So keep in mind you're now competing against people that can live on the same amount of money you might spend on a meal at McDonalds (US centric view here).
When I actually need to write code myself it tends to Java or Golang anymore. I got over myself and tend to use the tools with the best turn around time when I need to build anything more than a toy project, but I'm not doing a lot of coding myself anymore either.
YMMV.Quotewhich ones are crap?Any which promise you that the degree will translate into employability. Any "for profit school" especially. As I said before, I see some solid candidates are coming out of wgu.edu, but that's probably because you need to be completely self motivating to finish up there and that is the #1 skill a good programmer really has.
The degree will just get you past HR drones in Fortune 500 companies. The ones who actually make decisions about who to hire or not, probably don't care what your degree is in. Or even that you have one, if you can present a compelling enough case to them.
I once interviewed a candidate who disclosed that the degrees on the resume didn't exist and were there solely to get past the resume filters. B.S. in Human Information Tech or something like that. Hired them on the spot for their honesty. Company downsized the entire department 2 years later, he was still there.Quoteand to the devs of bitshares, what path did you guys take to become programmers?
I'm not a bitshare dev. I can't speak for them, but here is what is working right now speaking solely as someone who's job it is to hire, train and manage new code monkeys for a living.
Get involved right now with something you feel passionate about. You're here right now, so my guess is you'd like to work with something bitshares or at least crypto related. I don't know about what the backend code needs right now. It seems to work well enough for our purposes. So we never really questioned it too deeply. The core devs should probably chime in on that.
But your question is broad enough that I think you might make a better UI person than core anyways.
One thing I do know is that the easiest language stack to learn right now is probably Javascript/HTML5 & CSS.
My advice, for what it's worth, is that if you really don't have much background and want to contribute right away go here...
www.w3schools.com go through the HTML, CSS & JS stuff.
Then dip into angular & node.js for a bit. Once you feel like you've got a handle on that, come back and help the guys working on wallet.bitshares.org , it's a great little project but they need a lot of UI/front-end help. (I'm not affiliated, just a customer).
If you want to get into serious coding, back end, systems programming etc. Learn C, then Java, then Go. I recommend Java because at this moment in time it is the highest paying language in the USA and has been for a number years. Followed by C# which is actually a Java variant. Despite people who managed to contract a case of Mono.
At this point I would recommend skipping C++ for a newbie. There is no compelling reason for it anymore. The pay scale compared to Java & C# isn't worth it, and the pain of dealing with it's quirks is not a path I recommend for anyone who is not a masochist.
Sadly, the language has devolved to monstrous levels of complexity. The learning curve for that language and the use cases for it will probably never lead to a higher paying career than the same amount of time spent on Java & C# will.
I have yet to see anything done in C++ in the last 10 years that in my opinion couldn't have been better done with either Java, Go or C. Pretty sure bitshares itself is written in C++ though, so if you want to contribute to the core and become an actual core dev. You will probably need to gain C++ skills in the long run. However the BTS project is probably big enough now that I'm not sure they really need more core devs. But they might want to chime in on that.
Python is a good control language, i.e. for scripting other stuff, but I personally don't feel much love for it. Lua seems to be smaller and faster in the rare cases where I just need to bind quickly and expose scripting to something.
The other use cases for Python seem to be getting sucked up by Javascript especially with the release of Nashorn. Which honestly a few years ago I would have probably just marched you out the door for wanting to get people already confused with Java & Javascript. Avatar stack is proving me wrong though.
Golang has removed all the use cases I would have had for a Python/C stack except driver development and bit banging, both of which are really rare anymore anyways.
Avoid Perl, PHP unless you have a compelling reason to learn them such as supporting a legacy code base.
PHP has been making strides lately, but I've seen too many people bitten by it's absolutely shitty security track record and the fact that despite the documentation being excellent, the sample code still shows you the absolute least secure way of doing things.
Yet in our case the company website is built on top of PHP/Wordpress. However we don't put anything mission critical there either.
Still that was never my call.
If you're interested in your first shot as a dev, drop me a PM. I've got enough space to mentor one more complete newbie coder and I'll be honest you sound to me like you probably have competency already and just aren't sure of direction and/or lack confidence. Let me know.
Interesting.... and this is the reason you are asking for Go developers
thing1, thing2, err := mylib.DoSomething(var1, var2);
if err {
panic("Oh crap!, %+v",err)
}else{
mylib.DoSomethingElse(thing1, thing2)
}
This means most of the use cases I would have had for C/C++/C#/Java have been moved firmly into the Go camp as of late.Wow, this thread is incredible! Thanks tsaishen for your reply, it is truly great stuff, and I was able to deduce invaluable insight from it. :-) Thank you Thom and Bytemaster for your advice as well.
I am interested in programming AI and will be pursuing that once I've gathered the more basic of skills. I think C++ is probably the right tool for that application. I'll check out css, html, and Java per your recommendation
//This line of code will never be reached
For Bitshares you want to learn C++ .
What happened is that Thompson & Pike (creators of C) moved to google and decided to create a language...
Wow, this thread is incredible! Thanks tsaishen for your reply, it is truly great stuff, and I was able to deduce invaluable insight from it. :-) Thank you Thom and Bytemaster for your advice as well.
I am interested in programming AI and will be pursuing that once I've gathered the more basic of skills. I think C++ is probably the right tool for that application. I'll check out css, html, and Java per your recommendation
What happened is that Thompson & Pike (creators of C) moved to google and decided to create a language...
Pls correct if I'm missing some elements of "prehistory", but the C programming language was the invention Bell Labs authored by Brian Kernighan & Dennis Ritchie in the early days of Unix development. The original, definitive standard was published in 1972 and became known as K & R C.
Go sounds interesting. Probably won't be long before you see Eclipse plugins to support it in that IDE, which althought not lightweight, is the Swiss army knife of IDEs.
I agree with tsaishen about choosing the right language for the task at hand, and that more often than not is based on the skill set of the dev staff, or, the costs involved to assemble a team for a project.
As for AI, I have a little exposure to that from the prime of my career. Smalltalk, lisp and Prolog were the most prominent AI languages in use then. All of those are hugely different from languages used for non-AI applications. IMO you are a very long way away from being able to handle AI programming, but who the hell am I to tell you that. If you have a desire, go for it! Just letting you know that's a heavy, deep area to master.
If you're really serious about AI (and after a couple of years of getting up to speed on basic CS concepts & practices) install the old school emacs editor, which includes a lisp interpreter. That will give you a rich environment from which to learn lisp, which as I said is quite different than the more mainstream languages of today.
IMO you would have much more opportunity in to make an impact and avenues to contribute in core crypto or UI programming. But I don't know what motivates you, so that opinion may not be very useful. Market demand is my primary basis for that opinion.
I was like you about a year ago, I had very little prior programming experience but a burning desire to learn and contribute. Looking back at the last year or so the main advice I can give you is to start building something and see where it takes you. Try out some different languages, read and educate yourself, but most important in my opinion: build something! :)
I had one programming class in university (I'm an aerospace engineer), a really basic C course with some elementary concepts. While I aced the course, C never resonated with me. I then had to use Fortran a little bit in the final year of my master, but once again it was something I was forced to do and never wanted to use again. Several years later I decided to play around with Java and build a couple Android apps. This was more fun but I was still not really hooked. I played around with Python a little for a Vertcoin / Monocle mining pool, and while Python is nice and all it still wasn't my thing.
When Bitshares finally launched we needed a block explorer, so I decided I'd try to build one. After struggling with node.js for a few weeks (yea really!) trying to get the RPC interface working, I finally cracked it and once I did I was hooked. Ever since I've been spending way too much time coding in javascript, doing frontend and backend stuff. While Javascript may be a poor man's language, it's the right language for me and I really love working with it and learning about it.
Moral of the story: experiment, build stuff, get your hands dirty, and hopefully you will stumble upon what's right for you!
I think it would be cool to use crypto-style ledgers as the guts of a machine learning application.
Multiple instances of an algorithm could share and update a database tracking it's success at a task.
If the task was simple analysis or prediction, the program could automatically mutate and run the code looking for better solutions evolution-style.
The crypto ledger(or matrix) would form a sort of distributed memory database in which each instance and/or mutation would have it's own address to store it's feedback information.
The database could be host to a whole ecosystem of programs built on top of it. Programs that analyze the data, programs that spawn new mutations of itself, programs that interface with human beings, etc.
The program could even hire coders by putting on coding competitions where people submit code, the machine tries it out, and then releases tokens to whoever's code works the best.
The program could then stack itself fractal-style, using smaller and smaller agents to process information on multiple levels.
I think a substantial analytic intelligence could be built in such a way, even though their 'mortality' rate might be high.
Thoughts?
I think it would be cool to use crypto-style ledgers as the guts of a machine learning application.
Multiple instances of an algorithm could share and update a database tracking it's success at a task.
If the task was simple analysis or prediction, the program could automatically mutate and run the code looking for better solutions evolution-style.
The crypto ledger(or matrix) would form a sort of distributed memory database in which each instance and/or mutation would have it's own address to store it's feedback information.
The database could be host to a whole ecosystem of programs built on top of it. Programs that analyze the data, programs that spawn new mutations of itself, programs that interface with human beings, etc.
The program could even hire coders by putting on coding competitions where people submit code, the machine tries it out, and then releases tokens to whoever's code works the best.
The program could then stack itself fractal-style, using smaller and smaller agents to process information on multiple levels.
I think a substantial analytic intelligence could be built in such a way, even though their 'mortality' rate might be high.
Thoughts?
Step #1, determine ALL of your current balances, this is BTS, bitUSD, bitGOLD, whatever.
Step #2, pull down the entire order book for the entire exchange, buys and sells and track each portion as price @ volume
Step #3, determine the actual amount of BTS you would have if you liquidated all bitAssets into BTS. You need to account for both depth and trading fees and the fact that orders here are limit, not market, so you will be doing a lot of trades.
Step #4, perform a graph search that finds the most profitable path from direct total liquidation, through at least 2 other assets and back to BTS.
Step #5, determine if this pathway would result in more BTS than you would have if you just went to straight liquidation, IF TRUE GOTO #6 ELSE GOTO #1
Step #6, execute the plan, liquidate all assets except those already along your path, perform buy & sell actions from highest to least profit until the plan is fully executed, GOTO #1 IF COMPLETE OR IF PROFIT ON ANY NODE WAS LESS THAN TARGET
sounds like an interesting program. I can wrap my mind around the logic, but I have absolutely no idea how to open an rpc channel with the bitshares wallet. I'll see what I can do with this in the next few weeks. Thanks for the suggestion tsaishen