Author Topic: Looking to become a programmer, insight appreciated!  (Read 5456 times)

0 Members and 1 Guest are viewing this topic.

Offline tsaishen

  • Full Member
  • ***
  • Posts: 55
    • View Profile
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

Kinda wishing we had this right now, there are some interesting opportunities today between the decentralized exchange, meta exchange and shapeshift.io

Offline xh3

  • Full Member
  • ***
  • Posts: 90
    • View Profile
    • Bit-Cents
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

Offline xeroc

  • Board Moderator
  • Hero Member
  • *****
  • Posts: 12922
  • ChainSquad GmbH
    • View Profile
    • ChainSquad GmbH
  • BitShares: xeroc
  • GitHub: xeroc
Heck ... this is a challenge worth accepting .. just don't have the time to do it now .. :(

Offline tsaishen

  • Full Member
  • ***
  • Posts: 55
    • View Profile
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?

You seem dedicated to this cause, you've put a lot of thought into this and that's very, very clear.
I can see you are missing some pretty basic understanding of how AI's actually work in practice, vs theory but I want to give you a chance to do something interesting that would benefit the whole community, while educating you.

For everyone who is waiting on an announce from me, this has nothing at all to do with the announce, but it does make for an interesting project and he seems sincere enough.

So here's the deal...

At the moment there are serious liquidity issues in the BitShares decentralized exchange.  The buy/sell spread on certain assets is getting huge.  If you want to do AI, you need to understand that AI is nothing other than a combination of analysis and action.  So let's try the simplest algorithm, buy low & sell high by walking assets.

Using the language of your choice, open an RPC connection to the bitshares wallet.
Code: [Select]
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

This by itself will not result in a regular profit BTW, because everything passes both into and out of BTS directly.
But it will cause more churn & liquidity in the market, which helps everyone believe it or not.

If you want it to be profitable, once you have perfected that algorithm incorporate information sourced from this, https://metaexchange.info/apiDocs
And add BTC/BTS & BTC/bitAssets into the mix, since there are almost always arb ops there and frankly that exchange could really use the liquidity.

The bulk of this work can be done with a combination of a decent graph DB and a strong multithreaded concurrent language.
Once you are able to grok A* with fast failing exits and implement it against a graphdb, you will have the basis for your very first AI and the rest of the field should start clicking into place more clearly.  The best tutorial I ever saw on implementing A* was actually a C# tutorial from XNA, they were building a 3D pacman type game and needed an AI to control the ghosts/baddies.  Believe it or not, that algo actually directly applies here.  Wish I had the bookmark, but I don't recall having seen it since 2008.

My recommendation for this is Go, Java or NodeJS, in that order, but you can choose your own .  You can do it in C++ but you'll find yourself spending more time chasing memory leaks than chasing money. (not true if you use some of the really cool new features in the language, but those aren't all widely supported yet).

Build it step wise on github,
Post here to show your code as you complete each step,
I'll give you 100 BTS each step that compiles and runs, and I'm willing to bet that others here will as well. 
Once it's fully functional, launch it and let us toss you some coin to play with.  If it works well, maybe issue a bitasset on it and let us all benefit from your education ;)

Here is how I would rate the task as a hiring manager.
Assuming each step functions...

1 step per week, complete and total newbie but as long as he progresses, he has potential.
2 steps per week, new programmer, maybe unsure with the languages or tools used.
3 steps per week, mid level programmer, or perhaps being extra cautious probably a good hire in the $50-70k range.
4-6 steps per week, mid level programmer, if they are coding unit tests at the same time, then upper mid level.  probably $75k - $100k range.
7 steps per week, high level coder should probably clear about $120k per year.

>7 steps per week, pulled a wally (outsourced all or most of his work to elbonia for 25% of his pay, and is actually taking an in office vacation).  He's probably management material, $150k - $200k per year ;)

Let me know if you want to accept the challenge

Offline gamey

  • Hero Member
  • *****
  • Posts: 2253
    • View Profile
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?

This is pretty much what neureal.net aims to do but there are many steps in the product.
I speak for myself and only myself.

Offline xh3

  • Full Member
  • ***
  • Posts: 90
    • View Profile
    • Bit-Cents
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?

Offline tsaishen

  • Full Member
  • ***
  • Posts: 55
    • View Profile
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!

There is nothing wrong with Javascript for client or server anymore.  It's a fast, and powerful language.  The problems are the same as PHP, makes it easy to do stuff you didn't intend.

Be careful using it for any number crunching unless you write test cases to verify that things always come out correctly and make sure you use the correct math libs for doing it.

As an aside, I've read a lot of Go vs Node stuff lately and I do like Go's lack of callback hell and easy concurrency model better, but the fact is that you will never use that stuff 90% of the time.  The 10% when you do need it, it's a godsend.

As for codeschool it looks nice, if you want to get into programming though you are probably WAY better off just finding some opensource project you like and volunteering to do some work on it.  e.g.  I don't know of a single open source project with AAA+ Grade docs.  No one wants to write the manual, they just want to code.  But if you read the code you can write the manual.  You can also tinker with the code and see what happens.

I still think direct contribution is best.
One of my best coders started his career by playing Planeshift and deciding that he wanted to contribute.  He had never wrote a line of C++ in his life, straight VB guy.  He hoped in IRC, asked for some low hanging fruit to cut his teeth on.  Ended up creating the chat command structure in the game (the game had chat but was missing crucial bits like /group or /yell).  Launched his entire career off that.

Offline svk

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!
Worker: dev.bitsharesblocks

Offline rgcrypto

  • Hero Member
  • *****
  • Posts: 557
    • View Profile
    • Cryptoctopus Blog

Offline tsaishen

  • Full Member
  • ***
  • Posts: 55
    • View Profile
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.

Sorry, you're right and I'm wrong.  I think they invented Unix.  Point was more or less they had used C a lot longer than most of us and had the benefit of hindsight in creating Go.

Go has an eclipse plugin.  Newest version isn't half bad, but I'm still in the LiteIDE camp, it just seems to work so much smoother.  Eclipse is like trying to pick grapes with an elephant.  You can probably use it, but it might not be the best choice ;)

AI in the crypto and finance world intersects at bot trading.  Build a bot that is correct 51% of the time and you have built your own private ATM.  Make one that is correct 75% of the time and you can retire tomorrow.  Problem is no matter how smart your bot is, someone else is looking to outsmart it.  Algo bots are the simplest and those are monstrously complex things.  A neural bot that "learns" from it's mistakes might be a better solution, but you need to have a nice stash of coins somewhere to let it ride that out.  Also crypto is unlike other finance.  The market is young and evolving.  The reasons for a rise or crash in price might never occur again because this whole field is in it's infancy.  Same might be said of other markets but it's more true with crypto because of the sheer lack of actual players.

Might be worth a shot though.  Wonder if someone could adapt Xchange to function with Mahout and then replay the BTS market for the last 6 months or so.

Offline gamey

  • Hero Member
  • *****
  • Posts: 2253
    • View Profile
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

neureal.net is an interesting blockchain application.  An alpha level testnet was just released but the point is that you can record your AI results on a blockchain in a contest/sponsorship.  A marketplace for AI agents.  So as a programmer you could be paid to write java AI if your results are the best. That sort of thing.  It is at very early stages though but perhaps could be of interest to you later on.  The first datafeed prediction is BTC price, so if writing AI that predicts the BTC price is appealing it might be worth considering as a starting point.
« Last Edit: April 13, 2015, 11:38:16 pm by gamey »
I speak for myself and only myself.

Offline xh3

  • Full Member
  • ***
  • Posts: 90
    • View Profile
    • Bit-Cents
Thanks Thom,

I find that my mind becomes more efficient if I focus on something that's on the edge of what I believe is possible for myself, it helps me calculate the entire tree of necessary steps. 

My motivation is pure artistic expression, followed lazily by utility and monetary gain. 

I love crypto.  I personally think it will prove to be the cornerstone of a whole host technologies in the not-so-distant future.

I would like to work on something at the intersection between crypto and AI.  I've got a full plate for now just looking up these languages, terms, histories, and usage cases. 

Thanks again everybody for your input, I've learned more than I thought I would from asking a few simple questions.


Offline Thom

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.
« Last Edit: April 13, 2015, 07:21:17 pm by Thom »
Injustice anywhere is a threat to justice everywhere - MLK |  Verbaltech2 Witness Reports: https://bitsharestalk.org/index.php/topic,23902.0.html

Offline monsterer

For Bitshares you want to learn C++ .

If you want to contribute to the bitshares core, then you want to learn c++. Otherwise not.
My opinions do not represent those of metaexchange unless explicitly stated.
https://metaexchange.info | Bitcoin<->Altcoin exchange | Instant | Safe | Low spreads

Offline tsaishen

  • Full Member
  • ***
  • Posts: 55
    • View Profile
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

It depends on what you're trying to actually accomplish with AI.  C++ has several good libraries so I wouldn't count it out. 

But the type of AI relevant to cryptos, finance and trading is in my opinion better handled by languages designed specifically for AI.
There are a few, LISP comes to mind which oddly enough someone was just asking about Clojure which is a LISP variant, so maybe that's a good choice.  Never actually used it though so YMMV.

If I were building an automated trading system, I would use machine learning framework with a language I already know.  Hadoop has a sub project called Mahout that provides an excellent basis for building a "smart bot" and it's Java so I don't have a learning curve there and I can acquire talent easy enough.  https://en.wikipedia.org/wiki/Apache_Mahout  The nice thing about building on top of this is instant scalability.  You have a problem that parallelizes well?  Spin up 10,000 nodes and be done in a few seconds instead of a few days.

I wouldn't discount OpenCV though especially for computer vision related AIs, it's C++ but has bindings for a number of languages.

When I select a language for a task I have a little mental flowchart I use so I can limit my choices rapidly and start focusing on the problems at hand.  I'm sure everyone else who has done this for a living follows a similar process.

#1 Identify the problem.  This literally means "Ask questions and break things down until the answers become blindingly obvious."

#2 Select the problem domain.  Is the project user facing?  Is it a server that needs to run reliably for years?  Is it something just needs a quick run once in awhile?

 I literally found myself stepping into a project once that had 3 years of development time under the previous manager.
It was nowhere near completion but we managed to complete it overnight. 

I was able to do that because up to that point, none bothered to notice the underlaying task could be run as a perl 1 liner on an hourly cron job.  They had built this huge framework with Spring & J2EE on JBoss, but missed something totally obvious.
They were looking for a programmatic Java based solution, when they should have asked the server admin to script the 1 liner and add it to cron.

So make sure you fully understand the problem domain & requirements before you try to look for solutions.

#3 Design a solution.  Again this is asking questions like, what resources do I have? what tools can I use?  There are so few "actually novel" problems in comp-sci.  Someone has probably solved your problem before, you should look to leverage their efforts.  Many time a "glue it and go" will provide a better solution than "coded from scratch".  Furthermore, it's been my experience that the best language for a particular job comes down to "What languages does my team already know".  Unless you are choosing something highly esoteric, most times there's a library out there for any given language that already gets you 90% of where you want to be.  You should just pick the language that your team is most comfortable with and roll with that.  Same with DBs and even OSs. 

I saw a really great company completely and epically fail because they decided to move from MSSQL to PostGres.  It was a cost saving move, but none of their software knew how to talk to it and their DB admins were MSSQL Certified with no clue about how to deploy PostGres.  By the time they caught this, they had already burned bridges with customers due to downtime. 

In otherwords, the most epic flaming sword is of no use to you and might be dangerous if you work in a paper factory.

#4 Create a validation framework.  This means answering the question "How do I know that number 3 solves number 1 without creating new problems?"  For many people this means you start by writing a test harness and crafting individual unit tests.  If you do this before you ever write a single line of actual functioning code.  Your code will self validate.  It either builds and runs, or you get lots of screaming red lights on your build tree.  If you do this, please learn to commit your code for the entire week before lunch time on Thursday. If make your team work late nights on Friday and Saturday you will become a pariah, quickly...

I'll let someone else add their horror story here. 
I tend to take Fridays off and turn off cellphones and emails after 5 on Thursday for this specific reason.

#5 Start coding.  You've identified that there is a programmatic solution to #1 that requires you to either write something from scratch or create some glue code to stick some existing frameworks together.  You've created a way to verify that your solution actually solves the danged problem.  Now you need to do the leg work to finish up.  This is actually these easy part.  Relax and enjoy yourself.

#6 Test, test EVERYTHING.  Check that each function you wrote returns correctly, not only in the common cases, but at ALL the edges. 

Try to imagine the worst possible way your code could fail (probably should have started doing that during #5 BTW), then realize that you are an idiot because you will always miss the obvious.  If you didn't realize that by now, reality is going to slap you upside the head really, really soon.

Here are some reality slaps, just off the top of my head.
Actual things that can really happen...

You have a trading bot that sees a trade of 1 BTC for 0.001 USD.  What happens? 
You need to track BTC vs BTS values, but BTS is now showing less than 1 satoshi, how does your software react? 

You used INTs for your INT values and now you are dividing in a what?
Uhh where the hell is that 0 coming from? (Might be a Java specific issue)   

You used a 32bit float to represent an INT value, now you have 5 billion ints, do you even know if the value is now positive or negative? 
What happens when one or more of your counters roll over? 

Yes test everything!  Also verify that all your assumptions are correct.  For instance if you are pricing from a price feed and the feed goes down, do you suddenly begin to price things to 0, or do you pause until the feed returns or switches over?  Are absolutely sure about that?

If there is a panic, or an exception don't ignore it and
please don't just log it as

"Ok something happened, but it's alright because this can't ever occur" or even worse...
Code: [Select]
//This line of code will never be reached

And for the love of God don't be this guy! 

*blockchain.info I'm looking at you*

#7 Give it to the user, have them help you identify new problems and repeat steps #1 through #6
#8 Maintain it, i.e. GOTO #1

Offline xh3

  • Full Member
  • ***
  • Posts: 90
    • View Profile
    • Bit-Cents
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

Offline merivercap

  • Hero Member
  • *****
  • Posts: 661
    • View Profile
    • BitCash
Much realness from the OP.  :P

What do you think of Clojure?
BitCash - http://www.bitcash.org 
Beta: bitCash Wallet / p2p Gateway: (https://m.bitcash.org)
Beta: bitCash Trade (https://trade.bitcash.org)

Xeldal

  • Guest
I've been using Go for the last 4 months or so, for my market making / arbitrage bot and can attest to its ease of use.  I had about a year or 2 prior experience in C and I was surprised how quickly I managed to pick it up.

I love the ease of subroutine concurrency, buffered channels and slices.  makes what would have been fairly complicated a breeze.

I'm using LiteIDE also.  One of a few that come with native Go support.  Good stuff.  I like how just by saving the project it tells me everything it has a problem with.

Like you said Go doesn't really have much support for GUI yet, which was a little upsetting but not wholly necessary for what I was trying to do... would have been nice though.

Offline tsaishen

  • Full Member
  • ***
  • Posts: 55
    • View Profile
Quote
Interesting.... and this is the reason you are asking for Go developers

Well the question wasn't "Why is tsaishen looking for a Go dev?" 

It was asking for honest advice for a newbie programmer.  It was the best advice I could give.

For anyone that cares about why I would choose Go.
What happened is that Thompson & Pike (creators of C) moved to google and decided to create a language enough like C that anyone competent in a C variant language could pick it up easily.  They looked back with some 30 years of hindsight on C and decided to re-implement it but better.
They made it very hard to shoot yourself in the foot with it.  Go is C with the really dangerous bits removed and a bunch of modern conveniences added to the stdlib. 

A newbie should probably not get near Go until they have a couple of solid projects under their belt in something else, because the language can get a bit obtuse and the meaning of things isn't always obvious, even to me.  (If they had added parens and semi-colons so it looked more like a general C variant I wouldn't be making this argument BTW).  A really solid IDE would be a huge boost to general adoption as well, but I find LiteIDE does most of what I need it to.

If you have strong C familiarity, Go is drop dead simple to learn, primarily because it was created by the creators of C.  Think C with garbage collection added and auto-initializing variables plus multi-returns. 

Multi-return and Implicit types are what got me all fan-girlish about Go though.
Code: [Select]
    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.

I wouldn't do anything that needed a UI in Go since there isn't a solid UI lib and the majority of bindings are outdated.  But if you're ok with a webui which is like 90% of the work I see anymore.  Go is a solid choice.

For cross platform GUI work I tend to use QT or Java Swing, or more recently C# & Mono.

I'm asking for Go developers because Go is the tool we decided to use to build our backend middleware product called CASEY. 

Offline xeroc

  • Board Moderator
  • Hero Member
  • *****
  • Posts: 12922
  • ChainSquad GmbH
    • View Profile
    • ChainSquad GmbH
  • BitShares: xeroc
  • GitHub: xeroc
I decided to do some python coding gor bts mainly because I wanted to learn python and will never really consider myself a "coder" ..

Disclaimer: I am a communications engineer .. daywork is (almost) unrelated to crypto

Offline betax

  • Hero Member
  • *****
  • Posts: 808
    • View Profile
Speaking as a full-time professional programming manager, I read this as...

Quote
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...
Quote
Which languages are worth learning?
Which tools are the best for new construction workers?

Quote
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.
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.

Quote
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

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.

Quote
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.

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.

Quote
and 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
https://metaexchange.info | Bitcoin<->Altcoin exchange | Instant | Safe | Low spreads

Offline rgcrypto

  • Hero Member
  • *****
  • Posts: 557
    • View Profile
    • Cryptoctopus Blog
This entire thread should be a blogpost about how to become a programmer.  +5%

Offline bytemaster

As a veteran c++ developer I can say that the language is not dead, but is certainly something you must love and fortunately for me I love it.

I believe that quality c++ developers can earn significantly more because they are much harder to find.   Considering you are starting out you wouldn't be a quality c++ developer and thus your earning potential is similar to any generic programer. 

So I would say that c++ is only worth it if you are willing to become an EXPERT and rake in the high pay.   

For the latest updates checkout my blog: http://bytemaster.bitshares.org
Anything said on these forums does not constitute an intent to create a legal obligation or contract between myself and anyone else.   These are merely my opinions and I reserve the right to change them at any time.

Offline Thom

SHIT! That was an extraordinary reply! Long and thorough.

Take it from a 30 year veteran programmer  who learned by doing (autodidactic) you have just been given a huge shot of useful info, especially the part about letting your passion fuel your efforts. That's what I always did and still do. When you follow that model it will never feel like work and your motivation will be at it's best.

Dang that was a monstrously comprehensive post.  Saving it in my archives. His advice is spot on IMO, and I agree that the javascript / coffee / HTML / CSS is the easiest to learn and in very high demand. Also one of the most interactive programming environments to work in, with a short feedback cycle. Very important to reinforce what you learn and to rapidly become proficient.

I learned C early in my career, never picked up C++. tsaishen's info really highlights why it was never worth the investment of time required to learn all it's nuances and confirms why my choice to instead focus on Java and the UI stack was the right path for me.

One last piece of info I didn't learn early enough: become sensitive to exactly how you contribute value to the the company's products, and learn to measure that with metrics which are easy to understand. That is how you demonstrate your worth and how you can correct mistakes that could derail your career goals. It helps you to stay focused make wise decisions about where your career is heading.
Injustice anywhere is a threat to justice everywhere - MLK |  Verbaltech2 Witness Reports: https://bitsharestalk.org/index.php/topic,23902.0.html

Offline Stan

  • Hero Member
  • *****
  • Posts: 2908
  • You need to think BIGGER, Pinky...
    • View Profile
    • Cryptonomex
  • BitShares: Stan
Speaking as a full-time professional programming manager, I read this as...

Quote
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...
Quote
Which languages are worth learning?
Which tools are the best for new construction workers?

Quote
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.
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.

Quote
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

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.

Quote
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.

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.

Quote
and 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.

Egad!  There is some high-octane good advice in there.  I'll give you 3 credibility points.
(But you had me from the beginning when you all but conceded that EEs are the Highest Life Form.)

As a result, I'm tentatively adding you to my official "What, Me Worry?" List just below my hrair limit cutoff at position #16.

Rabbits can count up to four. Any number above four is hrair, “a lot,” or “a thousand.” —Watership Down


Anything said on these forums does not constitute an intent to create a legal obligation or contract of any kind.   These are merely my opinions which I reserve the right to change at any time.

Offline tsaishen

  • Full Member
  • ***
  • Posts: 55
    • View Profile
Speaking as a full-time professional programming manager, I read this as...

Quote
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...
Quote
Which languages are worth learning?
Which tools are the best for new construction workers?

Quote
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.
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.

Quote
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

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.

Quote
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.

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.

Quote
and 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.

Offline luckybit

  • Hero Member
  • *****
  • Posts: 2921
    • View Profile
  • BitShares: Luckybit
Learn any language, practice daily until you get good. Start with small apps, work your way up to contributing to projects.

For Bitshares you want to learn C++ .
https://metaexchange.info | Bitcoin<->Altcoin exchange | Instant | Safe | Low spreads

Offline rgcrypto

  • Hero Member
  • *****
  • Posts: 557
    • View Profile
    • Cryptoctopus Blog
That's awesome dude, we have a bunch of great dev here and will follow the answers as I am also interested in jumping in.

Offline xh3

  • Full Member
  • ***
  • Posts: 90
    • View Profile
    • Bit-Cents
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. 

Which languages are worth learning?

Do I need a degree to land a job in the field?

if so, what type of program is best?

which ones are crap?

and to the devs of bitshares, what path did you guys take to become programmers?

Thanks in advance for any responses.  :-)