Я выбрал четыре языка, так как и платят немало и работа интересная(python, c#, java, c++).. А зачем? Ну понятно JAVA и C# конкуренты в Enterprise (Благодаря Xamarin еще и в Mobile). Про Python и C++ - пригодятся в ML и Data Science. Ну кто знает. Фишек у каждого языка тьма, как и недостатков. Люди годами по локоть в кодине и бывает сложно разобраться в одном-то. Они зараза развиваются ещё. Просто знания синтаксиса недостаточно. Junior - это человек всё же с опытом работы. Он был? Денег платили?
class Sample
{
private int _a;
public void Method1(int a)
{
// Logic...
}
public void Method2(ref int a, ref Sample s)
{
// Logic...
}
static unsafe void Method3() {
int a = 5;
int* p = &a;
// Logic...
}
}
Джаву я собираюсь учить через годик, так как это самая высокооплачиваемая работа, а так же самая скучная.- Супир! Вы ещё пока не поднимали упавший продукт банка и не писали патч за пару часов, чтобы клиенты с говном не съели. А так да - скукота. Поседеть от скуки можно.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Forms;
using MonadTeq.Toster.UI.Annotations;
namespace MonadTeq.Toster.UI
{
/// <summary>
/// An abstraction of view model for data binding.
/// </summary>
public abstract class ViewModel
: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected bool UpdateProperty<T>(ref T oldValue, T newValue, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(oldValue, newValue))
{
return false;
}
oldValue = newValue;
OnPropertyChanged(propertyName);
return true;
}
}
/// <summary>
/// Represents a view model for business logic.
/// </summary>
public sealed class RandomSummaryViewModel
: ViewModel
{
private int _accumulatedValue;
private int _value;
public RandomSummaryViewModel(int initialValue = 0)
{
_accumulatedValue = initialValue;
}
public int Value
{
get => _value;
set => UpdateProperty(ref _value, value);
}
public int AccumulatedValue
{
get => _accumulatedValue;
set => UpdateProperty(ref _accumulatedValue, value);
}
}
public partial class RandomNumberSumForm : Form
{
private readonly RandomSummaryViewModel _vm = new RandomSummaryViewModel();
private readonly Random _rnd = new Random();
public RandomNumberSumForm()
{
InitializeComponent();
//
// Configure data bindings here...
//
// Bind text box (id: tbxCurrentRandom) property Text to 'Value' property of RandomSummaryViewModel instance...
tbxCurrentRandom.DataBindings.Add("Text", _vm, "Value", false, DataSourceUpdateMode.OnPropertyChanged);
// The same but for label (See logic above)
lblSum.DataBindings.Add("Text", _vm, "AccumulatedValue", true, DataSourceUpdateMode.OnPropertyChanged);
}
private void btnNextRandom_Click(object sender, EventArgs e)
{
_vm.Value = _rnd.Next(0, 100);
_vm.AccumulatedValue += _vm.Value;
}
}
}