Learning subjects for junior level developers at Skitsanos Inc.


Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Learning subjects for junior level developers at Skitsanos Inc.

  1. 1. FOR JUNIOR LEVEL PROGRAMMERS V.2.0 ! Skitsanos™, Inc. November 11, 2013 ! ! Learning Subjects Something you better know by now or learn by yourself ! Unfortunately, your university education, if you have any or even if you are still in university, is not really enough to help you in doing basic daily routines in this company. Yes, we call them basic, because once you learn all the things listed below, you will see how easy it was to get there — to know things. There are number of topics you need to be already already familiar with and if you didn’t managed yet, you are expected to learn if you managed to remain in the company after a first month, remember you are here for a reason. ! ! Networking and the Web Because we are writing software and web ware applications with intensive network use, you are obviously expected to know basics about Domain Name System (DNS), zone file, name servers, MX, CNAME and A records. You must know how to edit your local hosts file to to test your web apps locally. You need to understand HTTP protocol, how HTTP server works, HTTP methods, HTTP headers, connection keep alive, chunked transfer mode, Authorization methods. Ideally, if you really want to understand it right, implement your own basic HTTP server from scratch with programming language of your choice (no, you can’t use node.js to do all dirty job for you), surely by now you learned at least some basic programming in C#, VB, Java or whatever else you had your hands on. Make sure your custom made web server can serve requests for different hostnames, remember that hosts file mentioned above. You must know how to configure Internet Information Services (IIS) to add new web site, to setup web.config handle node.js and ASP.NET requests. Optionally (for now) you need to be LEARNING SUBJECTS !1
  2. 2. FOR JUNIOR LEVEL PROGRAMMERS V.2.0 familiar with Apache Tomcat, nginx, Jetty web servers, at least have an idea about them, download, install and make it up and running. You need to understand port binding, so play with your web server ports. You need to know how to implement socket servers for various purposes, you could need it for very basic tasks, like serving Flash Crossdomain Socket Policy file, or to implement messaging service for your hardware components that can talk via TCP/IP. Easiest thing for you to play with is to implement multi-person chat, oh yes, add authentication bit into it as well, you want your application to be safe, right? Web Scraping (http://en.wikipedia.org/wiki/Web_scraping) is very interesting subject and you will deal with it a lot when you dig for various data bits, your primary interest will be XPath based DOM navigation and RegExp operations, you know what is DOM and Xpath, correct? Small suggestion for you, take a look at Yahoo YQL, you will find it useful for scrapping. There are plenty of situations when your app will work just fine within your local network and will miserably fail on client’s network because of their network configuration that uses complex proxy environment based on single proxy or Proxy Auto Discovery (PAD) service, so yes, you need to know how to build your application with support for simple HTTP proxy, you need to know how to build PAD script and what consequences and impacts on your application could arise. You need to be able to create tunneling proxies that will take HTTP requests and pipe them in direct or modified form into destination that is not available for your client directly. You need to know URL Query String limitations, URL Encoding and why UTF-8 is preferred charset. ! ! Hardware In case if you was hired to deal with the hardware you have pretty straight forward learning curve, you need to know basics about embedded computing, remember, your target is to make something that looks nice and takes very small size, you can build best piece of hardware ever, but if you make it ugly, bloated — well, better not, always think on how to optimize the device you are working on, technically and design-wise. LEARNING SUBJECTS !2
  3. 3. FOR JUNIOR LEVEL PROGRAMMERS V.2.0 It is not always you will be dealing with CAD designer and/or drafting person, so ideally for you to have a clue how to use Sketchup (formerly know and Google Sketchup) to build your own 3D models for device casing and how to prepare your 3D model for 3D printing. Hardware wise, you expected to know things like Arduino, sensors, digital and analog data collection, simple wiring, soldering and obviously programming for variety of boards. ! ! Programming in general You are going to deal with number of programming languages and techniques in the company, those are Adobe Flex/ActionScript 3, JavaScript (for client side and server side both), including node.js, you will need to have an idea about PhoneGap, Titanium frameworks, using jQuery, Bootstrap. You need to know about content and data separation, content placeholders, templating, rendering content for various screen resolutions and how to divide your application in multiple micro fragments to implement application modularity. You need to understand how interpreted language execution differs from compiled one, Flash AVM (http://en.wikipedia.org/wiki/ActionScript_Virtual_Machine) vs in-browser JavaScript engines are your topics to study as well. Oh, did we mentioned that there are Tamarin and RedTamarin projects exists? There are situations that you need to create applications that allows disabled people to perform operations same way as people with no audio/visual limitation do. User interface localization and multi-lingual support in run-time or application boot-time modes are must have topics for you as well, you must be able to create applications with that functionality. In situations when you have to deal with devices like compact label printers, you would need to know how to work with serial communication ports over cable or Bluetooth and be able to implement your own support for Epson ECP commands if there are no SDK provided from the device manufacturer. You need to be able to print textual and graphical information, to import image, convert it into a bitmap format and print it via ECP commands sequence on device that you programming for. ! LEARNING SUBJECTS !3
  4. 4. FOR JUNIOR LEVEL PROGRAMMERS ! V.2.0 Databases Because we are more like noSQL company and makers of Kanapes IDE (http:// kanapeside.com), obviously you will be expected to have quite strong background on CouchDB, its Cloudant version (http://cloudant.com), Cloudant’s Search/Index functionality and ElasticSearch (with its CouchDB river plugin, http://www.elasticsearch.org/). You need to be able to create data documents, design documents, views, lists, show functions, you must understand map and reduce, grouping results and aggregating data of various natures into one single output. You need to know how serve JSON and CSV directly from CouchDB, so HTTP headers are again something you should know by now. Database sharding is another nice topic for you to learn. If you don’t deal with CouchDB from C#, ActionScript 3 or Java where we have our own API libraries, but with node.js, there is a module called nano (https://github.com/dscape/nano). We use it a lot, so you need to be familiar with that one too. You should have some minimalistic background in Oracle MySQL and Microsoft SQL Server, although PostgreSQL is also nice to know about. You will be dealing with situations when you will need to create various data outputs and reports, in some cases you will be able to wrap it via JasperSoft Report Server, but sometimes you would need to create data collecting bots programmatically that will be executed on schedule via Windows Task Scheduler, as Cron job or via Iron.io IronWorker service (http://www.iron.io/ worker). Multi-thread and event driven programming for heavy processing will be one of the things you will deal with. ! ! References Yahoo YQL — http://developer.yahoo.com/yql/ Node.js — http://nodejs.org/ IIS_Node — https://github.com/tjanczuk/iisnode AVM — http://en.wikipedia.org/wiki/ActionScript_Virtual_Machine CouchDB — http://couchdb.apache.org/ LEARNING SUBJECTS !4
  5. 5. FOR JUNIOR LEVEL PROGRAMMERS V.2.0 Cloudant — http://cloudant.com Kanapes IDE — http://kanapeside.com/ nano node.js module — https://github.com/dscape/nano Trimble Sketchup — http://www.sketchup.com/ Jaspersoft Report Server — http://community.jaspersoft.com/project/jasperreports-server IronWorker — http://www.iron.io/worker LEARNING SUBJECTS !5