Foundations of programming

Lecture thirteen - Software development in XXI century

Work Plan

  1. Introduction, types of programming languages, pseudocode
  2. Variables, data types
  3. Simple instructions and tricks
  4. Pointers and arrays
  5. Functions and Procedures
  6. Input / Output
  7. Data Structures
  8. Modern C++
  9. Error Types /Debug
  10. Python
  11. Python II
  12. Object Oriented / Functional programming
  13. Software development in XXI century
  14. Final exam / Test

Software developer then and now

image

Software development from XX to XXI century
Who are those guys?

Software developer then

Knowing how to create an optimal algorithms.

Creating desktop applications with IDEs like Visual Studio, Delphi, or Oracle Forms.

If you needed some missing functionality, then you had to develop it on your own.

Relying on your skills and the books on your shelf.

You had to be wise in the ways of mathematics.

Software developer now

Modern software development is about knowing the landscape of tools and libraries as well as using them.

Software development moved from desktop applications to web applications.

Single developer don't possess the knowledge needed to complete the project - Stack Overflow does.

Knowing how to work with big data and parallel computations.

Important to understand existing code and reducing self-written code to the absolute minimum.

Software developer vs software engineer

Software developer takes functional specification and delivers the code required within tight parameters, essentially completing the task in isolation, without understanding or oversight of the project as a whole.

Software engineer is someone who thinks about the design, goes back to the business with questions and suggestions, and thinks about the impact on the business and the end user.

Back-end developer

Back end development refers to the server side of an application and everything that communicates between the database and the user.

This type of web development usually consists of three parts: a server, an application, and a database.

Back end languages include Java, PHP, Ruby on Rails, Python, and .Net.

Front-end developer

Front end development manages everything that users visually see first in their browser or application. It might be the website, the web app or a mobile app.

Front end developers are responsible for the look and feel of a site.

Front end languages include HTML, CSS, and Javascript. The two main front end JavaScript frameworks in the market today are AngularJS by Google and ReactJS by Facebook.

Mobile developer

Mobile developers are a type of software developer.

They specialise in mobile technology such as building apps for Google’s Android, Apple’s iOS and Microsoft’s Windows Phone platforms.

Mobile developers learn the programming languages and software development environment for their chosen platform.

Languages of mobile developers are: Java or Kotlin for Android, Objective-C or Swift for iOS and C# for Windows Phone.

More than 60% of web traffic now comes from mobile devices, and 25% of Americans use only mobile devices to access the internet.

UX/UI

UI (User Interface) and UX (User Experience).

UX designer focus on the user’s usability while UI designer focuses on user’s graphic impression.

UI Responsibilities: look and feel, responsiveness and interactive image,

UX Responsibilities: strategy and content, designing flow and prototyping, execution and analytics,

UX tools are prototyping software (Appcooker, Sketch), user testing apps , HTML5, CSS, JavaScript, Jquery.

UI should know graphic programs, basics of HTML5, CSS, JavaScript.

Dev-ops (development and operations)

Originally DevOps was a philosophy that promotes cooperation between software developers and operations managers.

DevOps has its roots in Agile, but it is relevant for applications developed in all methodologies.

DevOps is a system administrators participating in an agile development process.

DevOp role is to design and improve automated tools for systems management and monitoring, deploy releases and maintain services.

QA

QA (Quality Assurance) or QE (Quality Engineering) engineer,

The QA role involves the tasks such as understanding of the software product features & domain knowledge, writing test plans, writing test specifications, manual execution of tests and interpreting results.

Also automated tests, automated execution and generation of final results summary for release level regression testing.

Need average coding skills in programming languages such as, Java, C++, Python, SQL, and XML.

Specialist

Machine learning - programmers who develop machines and systems that can learn and apply knowledge without specific direction. Needed: Sci-kit Learn, Tensorflow, MXnet.

Big data specialist - management, administration and enhancements to systems based on big data architecture. Needed: Hadoop, Spark, MapReduce, ETL tools.

Other: Distributed Systems Engineer, Data Scientists, Research and Development, System architect.

Full-stack developer

Full Stack Developer is someone with familiarity in each layer of technology stack.

That means Front-end Development + Back-end Development + DevOps + Design..

Popularize by Facebook in terms of PHP developers.

"Jack of All Trades but a Master of None".

Modern applications elements

image

Languages

image

Technology stack

Technology stack composite the layers of components or services that are used to provide a software solution or application.

A stack is created when one layer of application is built atop the other, with the help of codes and hardware modules ranging from generic to specific.

image

Choosing technology stack

image

Technology stacks

image

image

image

image

Technology stacks

PHP: Facebook

Python: Instagram, Pinterest, Reddit

Ruby: 500px, Groupon, Airbnb

Java: Ebay, Amazon, Alibaba

C#: Guru, Stack Overflow, Bank of America

JS: LinkedIn, Walmart, PayPal

Programming Languages

PHP is used for simple and medium-level projects and it contains a lot of boxed solutions. PHP is rather an inexpensive technology with a broad global developer community.

Python is a modern language that provides fast and quality programming. It's mainly used on medium-level and large projects. However, Python developers are not that many and are quite expensive.

Ruby is a fast modern language that's mainly used on simple and medium-level projects and that's so much favorited by startups. Developer community is scarce and cost of development is high.

Java is a hardcore language that's very expensive and slow in development. It's mainly used on projects with some very specific and sophisticated requirements.

C# is close to Java and is used on complex projects such as FinTech.

JavaScript (JS) is the latest trend in software programming. It's used extensively on all types of projects including game development.

Languages

image

GitHub

image

Jobs

image

Salaries

image

Software process

Software process must include the following four activities:

Software specification (or requirements engineering): Define the main functionalities of the software and the constrains around them.

Software design and implementation: The software is to be designed and programmed.

Software verification and validation: The software must conforms to it’s specification and meets the customer needs.

Software evolution (software maintenance): The software is being modified to meet customer and market requirements changes.

Development process

Software development process is the process of dividing software development work into distinct phases to improve design, product management, and project management.

Practices:
Continuous integration
Prototyping
Incremental development
Rapid application development

Methodologies

Agile Development Processes:

Scrum - Cyclic and iterative, rather than phase-oriented — planning and implementation are concurrent, so while the team is busy building, they’re also planning for the future.
XP, Lean

Plan-Driven Methodologies:

Waterfall - The waterfall model is a sequential development approach, in which development is seen as flowing steadily downwards (like a waterfall) through several phases,
PRINCE, RUP

TDD

Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: Requirements are turned into very specific test cases, then the software is improved to pass the new tests, only. This is opposed to software development that allows software to be added that is not proven to meet requirements.

Cycle:

Add a test
Run all tests and see if the new test fails
Write the code
Run tests
Refactor code

Final exam

Test:
about 30 questions,

2 groups,

Closed questions + open (code) questions,


Material from all lectures
including: Error Types youtube presentation,
excluding: debugging, this lecture - software development

Expect results on 31st of january.

Final exam

Test:
multiple choice question

always at least one answer is TRUE,

fractional points (!)

resit (if you fail exam in 1st approach)
2019-02-11 11:30 - 13:30 A2-23

Final exam

Marking:

5 : 90%-100%

4,5 : 80%-90%

4 : 70%-80%

3,5 : 60%-70%

3 : 50%-60%

2 : <50%

Test example (easy)

Python is:

  1. an Hybrid language
  2. Interpreted Language
  3. a Compiled language

Test example (medium)

The Symbol "?:" represents in C/C++ :

  1. Keyword
  2. Operator
  3. Statement

Test example (medium)

void functionName(int variable, float& variable) is a:

  1. value returning function
  2. void function
  3. function with reference parameters
  4. function with value parameters

Test example (medium-hard)

Which statement makes sure that x is an even number?

  1. x = x%2 == 1 ? x++ : x;
  2. x = x%2 == 0 ? x+1 : x;
  3. x += x%2 == 0 ? 0 : 1 ;
  4. x += 2*x;

Test example (hard)

In given example @xxx define:

@xxx
def foo(x):
    print("Hi, foo has been called with " + str(x))
  1. Decorator
  2. Generator
  3. Lambda
  4. Annotation

Code question example (easy)

What is the output of this program?

#include <iostream>
using namespace std;
int main ()
{
    int a, b;         
    a = 10;           
    b = 4;            
    a = b;           
    b = 7;           
    cout << "a:";
    cout << a;
    cout << " b:";
    cout << b;
    return 0;
}
  1. Answer a:4 b:7

Code question example (medium-hard)

What is the output of this program?

f=lambda x:bool(x%2)
print(f(20), f(21))
  1. Answer false true

Code question example (hard)

What is the output of this program?

#include <iostream>
using namespace std;
int main()
{
    int i, j;
    j = 10;
    i = (j++, j + 100, 999 + j);
    cout << i;
    return 0;
}
  1. Answer 1010

References

https://www.siliconrepublic.com/advice/software-developer-software-engineer-liberty-it

https://www.coursereport.com/blog/front-end-development-vs-back-end-development-where-to-start

https://www.rainerhahnekamp.com/en/modern-software-development/

https://www.upwork.com/hiring/development/choosing-the-right-software-stack-for-your-website/

http://ddi-dev.com/blog/programming/how-choose-technology-stack-web-application-development/

https://intersog.com/blog/tech-tips/how-to-choose-the-right-tech-stack-for-your-software-development-project/

https://www.cprime.com/2012/09/project-management-agile-methodologies/