Information technology continues to evolve constantly, with software engineering, hardware engineering and cloud computing laying the foundational level to build robust solutions that span a wide range of applications and sectors. By bringing the cloud computing power closer to the software development principles we have the chance (and the challenge) to obtain new powerful capabilities that are inherent in a programming language and, hence, boost both the performance and the quality. In fast growing ecosystem, often the engineers face the challenge of designing new features on top of an existing large code base. This in turn means that binaries tend to be huge and take a long time to build/compile, not to mention the extra effort for maintenance. The result often is a non-flexible code base that cannot easily adapt to modern and flexible cloud environments.
Based on the above, there is a need for a new language competitive advantages, such as:
- Software needs to build quickly
- The software should run well on modern multi-core hardware
- The software should work well in a networked environment
- The language should be a pleasure to use
Go envisions to fulfill the objectives above. It seeks to reinvent programming in the most practical of ways, e.g. it builds and improves a lot on the existing C/Java/C#-style syntax, and it solves or leaves out many of the open features in C, C++ or Java to makes the developer’s life much easier. For example it offers:
- default initializations of variables
- memory is allocated and freed automatically
- fewer but more powerful control constructs
- it prevents unnecessary typing
- code is shorter and easier to read
- for memory management Go has a garbage collector, so there’s no need for smart pointers or for manually freeing memory
- for concurrency, Go provides a form of CSP (Communicating Sequential Processes), meaning that many concurrent Go programs don’t need to do any locking at all! Moreover, Go offers a quite a powerful tool to detect race conditions problems, which is fully integrated into Go’s toolchain
- Go code typically compiles to a single native binary, which basically makes deploying an application written in Go as easy as copying the application file to the destination server.
- Go community offers a plenty of tools natively supported by language core, that in most cases someone really don’t need any 3rd party library. For example it has http, json, html templating built in language natively and one can build very complex API services without even thinking about finding library on Github
- Go is cross-platform, so you can target an operating system of your choice when compiling a piece of code
From the website (https://golang.org/doc/) it is clearly stated that “Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction. Go compiles quickly to machine code yet has the convenience of garbage collection and the power of run-time reflection. It’s a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language”
All the above justify why Go is currently one of the fastest growing programming languages in the software industry. Its speed, simplicity, and reliability make it the perfect choice for a plenty of use cases. According to a report, Go is the fastest growing language on GitHub in Q2 of 2018. Go has grown almost 7% overall with a 1.5% change from the previous Quarter.
- This specific Code.Learn program lasts 2 weeks (2 Wednesdays & 2 Saturdays) with 24 hours of lectures and hands-on exercise on a real life project.
Key Objectives – Curriculum
The core perspectives of this training course is to present, explore and adequately cover all Go’s language aspects, accompanied with extended real-life business case studies & industry scenarios. The training begins with an introductory session that aims to provide a flavor of the language. The participants will learn how to build and run Go programs and will elaborate on a series of short code examples that illustrate core aspects of the language. Then the course dives into the language fundamentals and continues with object-oriented capabilities. Then covers in very detail the concurrency features and it continuous with testing and benchmarking, a survey of Go standard library and best practices. The training ends with a real-word (but indicative) hands-on projects.
An indicative outline of the training is the following:
- Development environment & Introduction (e.g. resources, overview of language characteristics, comparison against competitive alternatives)
- Overview of language features with short code examples
- Programming fundamentals (e.g. variables, constants, Booleans, numbers, Strings)
- Collection types (e.g. arrays, slices, maps)
- Flow control, Error handling
- Functions, Methods
- Object oriented aspects (e.g. key concepts, custom types, overriding methods, interfaces)
- Concurrent programming (Goroutines, channels, ranging over channels)
- Worker pools
- Spawning processes
- File handling (json, xml, Go binary files, custom, archive)
- Creating custom Packages
- Go commands
- Go Design Patterns
- Microservices basics
- Intro to distributing services
- Tips and tricks – best practices
- Hands-on project: Restful application
The lessons can be carried out:
- Inside a physical classroom with an instructor,
- In an online environment as a virtual classroom, with live connection with the instructor through video conferencing; or lastly,
- A combination of both physical and online.
The method of teaching will depend on the current conditions, and also on the participants’ preferences.
Regarding online, the instructor provides the taught material through screen sharing, live broadcast, or by working on the cloud where attendees can see and interact with everything in real-time. Attendees themselves can seamlessly and actively participate and ask questions, as they would in a physical classroom. Additionally, they can collaborate in team projects and deliver assignments and hands-on projects that the instructor can see and provide feedback easily and without delays.
Computer scientists, software engineers and developers that want to boost their career are welcome to participate to this code.learn program and unlock the full potentiality of the topics taught by upskilling their future career.