Software and System Engineer

Roman Hoog Antink


October 25, 2021

Course Overview


  1. Each week will consist of
    1. 1. Self-study
    2. 2. Online lessons given by Roman
    3. 3. Guided hands-on sessions with Roman
    4. 4. Exam each Friday morning
  2. Each candidate will be measured in terms of
    1. 1. Technical knowledge (gained and applied)
    2. 2. Communication (express complex mechanisms clearly and concisely)

Course highlights

  1. Software architecture
  2. Programming in go, creating your own crypto currency exchange
  3. Advanced TCP/IP, VPN, dynamic routing
  4. Cyber attacks including buffer overflow exploitation using C and assembler
  5. Applied cryptography

You will learn to...

  1. program in go
  2. write enterprise grade software
  3. describe complex mechanisms in concise and precise words
  4. understand security implications of writing software
  5. find and exploit zero-day vulnerabilities
  6. deeply analyse complex software issues, regarding various resources such as CPU, memory, network and disk I/O
  7. apply principals of good software architecture
  8. avoid unnecessary effort by keeping the code readable and maintainable
  9. understand concurrency and how to dissect a computing task into parts that may run in parallel
  10. avoid common pitfalls such as deadlocks and race conditions when dealing with concurrency
  11. the TCP/IP protocol and higher protocols that rely on it
  12. analyse and understand network traffic down to the packet level
  13. know essentials of the Linux operating system
  14. use inter-process communication
  15. team up and coordinate your efforts to work on a project simultaneously (interfaces, responsibilities, dependencies)

You will benefit from...

  1. practical real world exercises
  2. weekly exams revealing your progress in technical and soft skills
  3. a grading certificate stating completion of the training

What you need

  1. interest in gaining in-depth knowledge of software engineering, Linux, networking and security
  2. strong communication skills to express yourself clearly and comprehensibly
  3. proficient in spoken and written English

Field: Software engineering

Topics: Learning Go

  1. Learn language fundamentals
  2. Learn complex data types
  3. Learn interfaces, goroutines, wait groups, mutexes, channels
  4. Learn go error handling and unit tests
  5. Golang underworld: learn the difference between the heap and the stack

Field: Software engineering

Topics: Advanced Software Design

  1. Learn repos, commits, branches, working copy and staging
  2. Apply your knowledge on your own local repository (use git init to turn a subdirectory into a fully functional git repository)
  3. Learn basic operations such as
    1. Branching
    2. Create commits
    3. Amend the last commit
    4. Rebase
    5. Merge
  4. Setup and use your own git server
  5. Learn the dependency rule
  6. Learn the concept of decoupled systems
  7. Learn the principle of separation of concerns
  8. Learn the purpose and application of design patterns
  9. Get to know the singleton pattern, the chain of responsibilities pattern and the strategy pattern
  10. Split the cryptocurrency exchange project into separate modules to be assigned to each one of you
  11. Assign modules and tasks
  12. Define the collaboration workflow
  13. Start with the implementation. Try to make at least one use case work, even if it is the easiest one and still very primitive

Field: Software engineering

Topics: Concurrency, Algorithms and Optimisation

  1. Reverse engineer an existing bug
  2. Implement a set of rules to create a complex algorithm until all existing unit tests show green
  3. Learn about recursion
  4. Learn about complex data structures such as binary trees
  5. Learn how to use the golang profiler
  6. Find expensive functions and optimise them, either by adding concurrency or changing the algorithm
  7. Present proof of your improvement based on profiler output or other comparable measurements
  8. Master the golang sorting approach
  9. Succeed in generalising code to work on arbitrary types
  10. Learn how to make your own HTTP server in go

Field: Software engineering

Topics: Collaboration

Content: Continue working on the crypto currency exchange project

Field: Linux

Topics: Files and Processes

  1. Learn what Linux processes are and their most important properties
  2. Learn the basics of the powerful text editor vim
  3. Learn about regular expressions
  4. Learn what Linux files are and their most important properties
  5. Learn important functionality of the shell and a bunch of useful commands

Field: Linux

Topics: Inter-process communication

  1. Learn the simplicity and limitations of signals
  2. Learn about the purpose of a couple of selected signals
  3. Develop a sense of how signal handling and external actions need to be coordinated for consistent behavior
  4. How to use unix sockets and pipes to exchange data between processes
  5. Master UDP and TCP sockets. Know their strengths and weaknesses
  6. Gain practical experience with network protocol design

Field: Linux

Topics: Concurrency

  1. Get in touch with different classic mechanisms to establish concurrency:
    1. Multi-process
    2. Multi-threading
    3. Blocking I/O with select
    4. Non-blocking I/O
  2. Learn about concurrent I/O in go and why some approaches are not embraced in go
  3. Go concurrency challenges revisited

Field: Networking

Topics: TCP/IP

  1. Learn about the IP address structure and subnetting
  2. Get acquainted with the protocol headers of IP, UDP and TCP
  3. Learn the inner workings of TCP: flow control, retransmission, prevent reordering, flags, TTL and other header fields
  4. Learn about advanced TCP/IP topics, such as ICMP, traceroute and routing
  5. Observe how ARP works
  6. Learn how DNS works
  7. Learn how to use iptables as a firewall
  8. Learn in practice how to set up OpenVPN tunnels

Field: Networking

Topics: Advanced routing

  1. Use dynamic routing to propagate your VM local network across the VPN
  2. Learn all kinds of network address translation (NAT)
  3. See ICMP redirects in action
  4. Deploy OSPF throughout your VPN network. Get a feel for its complexity, even in a single-area setup
  5. Get introduced to IPv6 configuration and operation

Field: Security

Topics: Security mechanisms

  1. Learn the strengths and purpose of different encryption methods and algorithms
  2. Learn to distinguish symmetric and asymmetric encryption and their applications
  3. Verify certificates and create your own
  4. Setup a web server to make use of a certificate created by yourself
  5. See a bunch of ways how encryption can be analysed and even may fail
  6. Implement your own simplified variant of the famous Enigma encryption machine
  7. Have a look into C programming basics by following a tutorial. This won’t make you fluent in C, but at least you will be able to read it
  8. Get in touch with Intel assembly to learn how any computer program breaks down into machine instructions and how the stack is organised in frames containing local data of functions
  9. Work through a basic example of reverse engineering
  10. Explore system security by following small challenges

Field: Security

Topics: Attack vectors

  1. Become aware of typical approaches in phishing emails
  2. Learn to apply SQL injection attacks and get in touch with a first example of a string format attack
  3. Learn about buffer overflows, the mechanisms behind it and how they are carried out

Field: Security

Topics: Web security

Content: Learn common web attacks and their mitigation


Paid career starter program
  • Instructor : Roman Hoog Antink
  • Contract :Job contract at Beriflapp for those who are successful in the program
  • Certificate
  • Duration :3 months
  • Enrolled :6 students
  • Language :English
  • Location :Prishtine
    (Onsite / Remote)
  • Work time :09:00 - 17:00
  • Work days :Monday - Friday
  • Application deadline :18.10.2021


You can be your own Guiding star with our help