Java kotlin and js programmer

C++, C#, Java, Kotlin, Python, JavaScript . Which Has Better Opportunities and a Future

Which programming language do you choose and why? I’ve been concentrating on React/Vue and now Python for a while (I prefer React and like the possibilities of python/Django) But it seems like Python is I demand really for Machine Learning and Data science. but it’s more like you need College to be taken seriously? Out of the others mentioned . which has a great outlook?

Top comments (16)

Sloan, the sloth mascot

Don’t you NEED college to be taken seriously for data science and machine learning?

1 like Like Comment button

I’m a self-taught dev focused on websites and Python development. My friends call me the «Data Genie». When I get bored, I find tech to read about, write about and build things with.

I’d be careful of generalizing like that to say one always needs a degree. It ignores individual experience and norms in countries which can differ.

I’m a developer without an IT degree. I have a business degree. Often the job posts here say they need «Com Sci degree or degree in related field» and that hasn’t stop me getting several IT jobs. (One actually had a big machine learning part) Because employers value experience (can you do the job and what have you built before?) more than qualification. The first IT place I worked said they invited for a interview because I had a strong github portfolio and that my CV alone was too weak on the tech side. So remember that real world projects and side projects in your portfolio will showcase your ability to employers

Читайте также:  Python concatenate all strings in list

If you have zero college degrees you might struggle against developers / data scientists who have a degree in business, or tech etc. As a degree does signify a high level of dedication and problem solving.

Also there are a ton of ways to get qualified online through short and long, paid and free online courses. If you want to beef up your CV and your Github portfolio with data science qualifications.

I also chatted to my brother to works in machine learning space and I said I was worried I was not qualified enough to keep at the machine learning direction. and he said that there those who have the formally educated com sci / stats background and those who learn by experience and are self taught. And he said both exist in the field and you don’t have to only be educated to be successful.

3 likes Like Comment button

Источник

Почему вам следует полностью переходить на Kotlin

Я хочу рассказать вам о языке программирования Kotlin и о том, почему вы должны рассмотреть его для своего следующего проекта. Раньше я предпочитал Java, но за прошедший год обнаружил, что кодирую на Kotlin при любой возможности, и сейчас я действительно не могу придумать ситуацию, в которой Java был бы лучшим выбором.

Он разработан компанией JetBrains, и тот факт, что именно эти люди стоят в создании такого набора IDE, как IntelliJ и ReSharper, в полной мере отражается и в Kotlin. Он прагматичен и лаконичен, делает кодирование приятным и эффективным занятием.

Хотя Kotlin компилируется как в JavaScript, а скоро и в машинный код, я сосредоточусь на его основной среде — JVM.

Итак, вот несколько причин, по которым вы должны полностью перейти на Kotlin (нумерация случайна, без определенного порядка):

Kotlin на 100% совместим с Java. Вы можете в буквальном смысле продолжать работать над своими старыми Java-проектами, используя Kotlin. Все ваши любимые Java-фреймворки по-прежнему доступны, и любой фреймворк, который вы напишете на Kotlin, будет легко принят вашим упертым другом, любящим Java.

Kotlin — это не какой-то необычный язык, рожденный в академических кругах. Его синтаксис знаком любому программисту, пришедшему из области ООП, и может быть более или менее понятен с самого начала. Конечно, есть некоторые отличия от Java, например, переработанные конструкторы или объявления переменных val var . В приведенном ниже сниппете представлена большая часть базового синтаксиса:

class Foo < val b: String = "b" // val means unmodifiable var i: Int = 0 // var means modifiable fun hello() < val str = "Hello" print("$str World") >fun sum(x: Int, y: Int): Int < return x + y >fun maxOf(a: Float, b: Float) = if (a > b) a else b >

Это как если бы в язык была встроена более умная и читабельная версия функции String.format() из Java:

val x = 4 val y = 7 print("sum of $x and $y is $") // sum of 4 and 7 is 11

Kotlin будет выводить ваши типы, если вы посчитаете, что это улучшит читабельность:

val a = "abc" // type inferred to String val b = 4 // type inferred to Int val c: Double = 0.7 // type declared explicitly val d: List = ArrayList() // type declared explicitly

Компилятор Kotlin отслеживает вашу логику и по возможности автоматически выполняет приведение типов, что означает избавление от проверок instanceof и явных преобразований:

Вы можете перестать явно вызывать equals() , потому что оператор == теперь проверяет структурное равенство:

val john1 = Person("John") val john2 = Person("John") john1 == john2 // true (structural equality) john1 === john2 // false (referential equality)

Нет необходимости определять несколько одинаковых методов с разными аргументами:

fun build(title: String, width: Int = 800, height: Int = 600)

В сочетании с аргументами по умолчанию именованные аргументы избавляют от необходимости использовать строителей (builders):

build("PacMan", 400, 300) // equivalent build(title = "PacMan", width = 400, height = 300) // equivalent build(width = 400, height = 300, title = "PacMan") // equivalent

В качестве замены оператору switch используется гораздо более удобное и гибкое выражение when:

when (x) < 1 ->print("x is 1") 2 -> print("x is 2") 3, 4 -> print("x is 3 or 4") in 5..10 -> print("x is 5, 6, 7, 8, 9, or 10") else -> print("x is out of range") >

Оно работает как выражение, и как оператор, с аргументом, и без него:

val res: Boolean = when < obj == null ->false obj is String -> true else -> throw IllegalStateException() >

К публичным полям может быть добавлено кастомное поведение set и get, что позволит нам остановить загромождение кода бессмысленными геттерами и сеттерами.

Это POJO (Plain Old Java Object) с функциями toString() , equals() , hashCode() и copy() , и в отличие от Java он не занимает почти 100 строк кода:

data class Person(val name: String, var email: String, var age: Int) val john = Person("John", "john@gmail.com", 112)

Предопределенный набор операторов может быть перегружен для улучшения читабельности:

data class Vec(val x: Float, val y: Float) < operator fun plus(v: Vec) = Vec(x + v.x, y + v.y) >val v = Vec(2f, 3f) + Vec(4f, 1f)

Некоторые объекты могут быть деструктурированы, что, например, полезно для итерации карт:

Для улучшения читабельности:

for (i in 1..100) < . >for (i in 0 until 100) < . >for (i in 2..10 step 2) < . >for (i in 10 downTo 1) < . >if (x in 1..10)

Помните, когда вам впервые понадобилось отсортировать List в Java? Вы не могли найти функцию sort() и вам в результате пришлось узнать о Collections.sort() . А позже, когда вам нужно было написать String с заглавной буквы, то это привело к написанию собственной вспомогательной функции, потому что вы не знали о StringUtils.capitalize() .

Если бы только существовал способ добавить новые функции в старые классы; тогда ваша IDE смогла бы помочь вам найти нужную функцию при автоматическом дополнении кода. В Kotlin вы можете сделать именно это:

fun String.replaceSpaces(): String < return this.replace(' ', '_') >val formatted = str.replaceSpaces()

Стандартная библиотека расширяет функциональность оригинальных типов Java, что особенно требовалось для String :

str.removeSuffix(".txt") str.capitalize() str.substringAfterLast("/") str.replaceAfter(":", "classified")

Java — это то, что мы должны назвать почти статически типизированным языком. В нем переменная типа String не гарантированно ссылается на String — она может ссылаться на null . Несмотря на то, что мы привыкли к этому, это сводит на нет безопасность статической проверки типов, и в результате разработчикам Java приходится жить в постоянном страхе перед ошибкой NPE ( NullPointerException ).

Kotlin решает эту проблему, проводя различие между ненулевыми (non-null) и обнуляемыми (nullable) типами. Типы по умолчанию являются non-null, и их можно сделать nullable, добавив ? как, например:

var a: String = "abc" a = null // compile error var b: String? = "xyz" b = null // no problem

Kotlin заставляет вас защищаться от NPE всякий раз, когда вы обращаетесь к nullable-типу:

val x = b.length // compile error: b might be null

И хотя это может показаться громоздким, на самом деле все просто благодаря нескольким особенностям Kotlin. У нас все еще есть умное приведение, которое преобразует nullable типы в non-null везде, где это возможно:

if (b == null) return val x = b.length // no problem

Мы также можем использовать безопасный вызов ?. , который производит проверку на нулевое значение вместо того, чтобы выбрасывать NPE:

val x = b?.length // type of x is nullable Int

Безопасные вызовы можно объединять в цепочки, чтобы избежать вложенных проверок if-not-null (если-не-ноль), которые мы иногда пишем в других языках, и если нам нужно значение по умолчанию, отличное от null , то используем elvis-оператор ?: :

val name = ship?.captain?.name ?: "unknown"

Если ничего из этого вам не подходит, и необходимость в NPE крайне велика, то скажите об этом явно:

val x = b?.length ?: throw NullPointerException() // same as below val x = b. length // same as above

Это хорошая система лямбд — она идеально сбалансирована между читабельностью и сложностью, благодаря продуманному дизайну, с простым синтаксисом:

val sum = < x: Int, y: Int ->x + y > // type: (Int, Int) -> Int val res = sum(4,7) // res == 11
  1. Скобки метода могут быть перемещены или опущены, если лямбда идет последней либо является единственным аргументом метода.
  2. Если мы решили не объявлять аргумент одноаргументной лямбды, он будет неявно объявлен под именем it .

Эти факты в совокупности делают следующие три строки эквивалентными:

numbers.filter( < x ->x.isPrime() >) numbers.filter < x ->x.isPrime() > numbers.filter

И это позволяет нам писать лаконичный функциональный код — только посмотрите на эту красоту:

persons .filter < it.age >= 18 > .sortedBy < it.name >.map < it.email >.forEach

Система лямбд Kotlin в сочетании с функциями расширения делает его идеальным для создания DSL. Взгляните на Anko в качестве примера DSL, который призван улучшить разработку Android:

verticalLayout < padding = dip(30) editText < hint = “Name” textSize = 24f >editText < hint = “Password” textSize = 24f >button(“Login”) < textSize = 26f >>

У вас есть несколько вариантов, если вы собираетесь начать работу с Kotlin, но я настоятельно рекомендую использовать IntelliJ, который поставляется в комплекте с Kotlin — его возможности продемонстрируют все преимущество того, что и язык, и IDE разрабатываются одними и теми же людьми.

В качестве небольшого, но показательного примера, вот что всплыло, когда я впервые попытался скопипастить Java-код со Stack Overflow:

IntelliJ заметит, если вы вставите Java-код в файл Kotlin

Завтра состоится открытое занятие «Основы классов и объектов», на котором мы посмотрим на принципы проектирования классов и их реализации в Kotlin. Поймем, как объектно-ориентированное программирование работает изнутри, создадим свои структуры и посмотрим на возможности языка Kotlin. Спроектируем объектную модель данных. Регистрируйтесь по ссылке.

Источник

Оцените статью