Skip to main content
3 answers
4
Asked 930 views

What are the common programs(Spring, Hibernate, MySQL) that you have found most jobs use in conjunction with Java or C++/C# Programming?

Many jobs that require a coding language also request the knowledge of certain other programs as well, so seeking out what those programs are is important when those programs are not typically part of a Computer Science degree. #computer_science

+25 Karma if successful
From: You
To: Friend
Subject: Career question for you

4

3 answers


1
Updated
Share a link to this answer
Share a link to this answer

Richard’s Answer

Hi Steele,


Some of the things you mentioned (Spring, Hibernate) are language specific libraries while others (MySQL) are standalone programs. The difference is that a library will be directly included in your program and you will make code calls to it, and other programs will run on their own (written in whatever language) and you will interact with them through some kind of communication protocol.


I have more experience with Java libraries at the moment so I'll mention a few that I see as being very common.



Java Libraries

Spring


The Spring project is a grab bag of libraries and frameworks that can help make doing common tasks easier. For example Spring among other things can help with dependency injection, web servers and running your software.

  • Spring Dependency injection - a fancy term that just means setting up your Java object(s) to have the right set of other objects it will depend on to it's job. For example a class that reads a JSON document and searches for a particular term might depend on two other classes to help it do it's work: a JSON parser and a JSON search library. Dependency injection just makes it easier to set this up without too much work
  • Spring MVC - Model view controller. Basically a web server that allows you to define endpoints that will be executed when an HTTP request comes in. For example you could have a Spring "controller" that handles the "/cats" endpoint (which you could setup to run at your website "http://www.example.com/cats". When the user hits this in their browser your Java controller code will run and be able to generate whatever kind of response you want. This could be an HTML page with pictures of cats, or a JSON API response with links to cats. Web servers are a huge topic in themselves but Spring MVC is a common solution.
  • Spring Boot - A standardized way to build and manage your Java applications. Spring Boot gets you up and running quickly with standardized ways to build stand alone applications, web servers, etc. This is the new hawtness and companies will be lining up for your skillz. Combined with Docker and Kubernetes and you are fully buzz word compliant for the next 5 years.


Guava


The Guava project is an open source library that provides a core set of improved collections, caches, and functions that make your life easier.



Hibernate


The Hibernate project's goal is to provide a powerful mapping between your Java objects and storing them in a relational database. Relational databases are generally the workhorse of the industry for storing data. They are themselves separate programs (ie MySQL, Postgres) that often run on different computers that are connected over the network. In order to query a relational database you need to use a query language called SQL. SQL is very powerful and every developer needs to know the basics of queries, joins, indices, ordering, etc. Hibernate can help in some cases to reduce boilerplate and allow a developer to focus on writing the code and have Hibernate take care of generating SQL.



Jackson


This is a JSON parsing/writing library that makes transforming JSON text into objects and back again easy.



Jersey


This is an HTTP client library that makes calling out to APIs, web servers, etc easy to do from your code.



Bouncycastle


This is an opensource encryption library. Cryptography itself is a whole area of study and you need to know what you are doing to use these things correctly but invaluable when you want to conjure up some crypto magic.



Apache Commons


These are a large collection of useful utility functions and string functions that make your life easier.



Log4J


A very common logging framework. When you want to know what's going on inside your program.



... And many more!




Programs


Outside of Java libraries, useful programs and concepts that are critical to learn in order to be effective are:



Relational databases (MySQL, Postgres, etc) - as mentioned above these are still the workhorse of the industry.



NoSQL databases (Cassandra, MongoDB, etc) - these use different storage and retrieval strategies than relational databases. For certain work loads they are far superior to traditional databases. For other work loads they are terrible. The right tool for the right job.



In memory caches and stores (Memcache, Redis, etc) - these function to let you very quickly store and retrieve data in a machines memory. They often expose network protocols that allow remote machines to interact with them. Useful for storing data that is accessed very often and needs to be fast.



Network servers (Apache, Nginx, Haproxy etc) - these are stand alone web programs that can serve up static web pages stored on disk, or through various means delegate to other programs to generate content. They also proxy and route web requests, load balance and so on.



Containers (Docker, Kubernetes) - these let you package and run your software in isolate, repeatable and easily configurable environments. Too much load on your web server? Just push a button a spin up a new one through the power of docker. Obviously takes a lot of work to make systems be able to do this smoothly but many things are going in the "microservices" direction and docker and kubernetes are key.




Finally and most importantly learning key operating systems concepts and protocols is invaluable:


TCP/IP - The backbone of all internet communication.

TLS - Securing and encrypting communications between two network endpoints

HTTP - Simple, powerful and extensible client/server protocol

Unicode and UTF-8 - Character encodings and how they are transmitted on the wire. You'd be surprised how often ignorance of Unicode bites people in our industry in the butt.

Async IO - Being able to scale a single threaded program to handle hundreds of different requests at a time

File Systems - Block storage, file systems, directory trees, permissions. Most data ends up here or is read from here so good knowledge will be invaluable

Memory management - Garbage collectors, malloc, allocators. Heap and stack.

Concurrency - Multi-threading, shared memory, locks, mutextes, lockless, etc.

Syscalls and userspace vs kernel space - Understanding fundamental security model of how processes are kept separated and how programs enter and exit kernel protected memory and functions

Shells and scripting - Understanding the terminal and command line to get your work done. GUIs have their place but command line is forever.

Scripting languages - Perl, Python, Ruby. When you want to get stuff done fast. These languages can rival and in some cases exceed Java in terms of quality and ease of use of libraries.


.. and many more of course!



These are just some starting points. In the beginning there are a lot of unknowns and it doesn't seem clear how they all fit together. Over time it will become easier and everything will fall into place. My advice is to pick something that interests you at the moment, or that you are using at school or work. Go out and get a book on it, understand the fundamentals and add it to your tool kit. Rinse repeat.


Good luck!

Richard recommends the following next steps:

Pick a few topics or libraries you'd like to learn about
Read up on their wikipedia pages
Read a well put together book on the ones that interest you the most
Rinse and repeat
1
1
Updated
Share a link to this answer
Share a link to this answer

ABDUL’s Answer

Hi Steele,


Proficient software developer needs to be a JAVA developer with hands-on experience in developing multi-tiered enterprise solutions through entire SDLC using advanced development methodologies like AGILE, from proposals and development of core concepts to all stages of unit and integration test planning and execution, along with exceptional analytical and problem solving capabilities. You have to be familiar with many programming languages and frameworks including Core Java, Struts, JSF, JavaScript/JQuery, AJAX, JSON, HTML5, SQL, C, C++, with expertise in Spring MVC, Hibernate/JPA, JSP and RESTful Web services.


Web Application Development • Software Development • Project Coordination • Program
Design/Implementation • Software Coding • Web Programming • Test Design and Execution • Software Implementation • Requirements Management • Unit and Integration Testing • Technology Integration • Program Documentation


Languages: Java, Java EE, C, C++
Frameworks: Struts, JSF, Hibernate/JPA, Spring MVC, Bootstrap
Web: JavaScript, JQuery, HTML5, CSS3, AJAX, JSP, Servlet
Databases: MySQL, Oracle, MS SQL Server
Tools: Eclipse (STS), NetBeans, Visual Studio
Platforms: Windows, Mac OS, Linux/Ubuntu
Management and Version Control: Jira, GitHub
Build Tool: Maven, Gradle
Web & App Servers: Apache Tomcat, GlassFish, JBoss
SDLC: Agile, Scrum, Waterfall
Design Patterns: MVC, Singleton, Observer, Factory, Façade
Web Services: REST with JSON


Wishing you all the best in the future endeavors.

1
0
Updated
Share a link to this answer
Share a link to this answer

Hanish’s Answer

Java and the spring framework is mostly used in development of backend services or micro services. Backend services are used by the client side or Frontend side to communicate with the backend databases using the REST API paradigms. So if you’re someone that’s interested in this tech then you can find jobs as a backend engineer or developer where you’ll develop backend services using the Java.
0